UIBarButtonItem
に問題があります。外観プロキシを使用して、状態Normal
およびDisabled
の色を設定し、これをviewDidLoad
のUIViewController
メソッドで行います。ただし、ボタンが無効になっている場合でも、ボタンはNormal
の色になります(また、IBAction
メソッドが呼び出されていないため、ボタンは確実に無効になっています)。
質問はこれに似ています 無効にされたuibarbuttonitemのテキストの色は常に通常の状態の色です 、しかし、ここに投稿された解決策は私にはうまくいきません。
私のアプリはiOS8.2用で、Xcode6.2を使用しています
何か案は?
[〜#〜] edit [〜#〜]:これが解決策を見つけるのに役立つかどうかはわかりませんが、ボタンを作成するときにinitWithImage:
の代わりに initWithTitle:
すべてがうまく機能しているようです。これはAppleバグですか?
それでようやくこれを正常に機能させることができました。問題は、UIBarButtonItemsの色を2回設定していたことでした。1回は[navBar setTintColor:]を使用し、もう1回は外観プロキシを使用していました。外観プロキシだけを残すことで問題は解決します。
Barbuttonitemを変更する方法を探している人がSwiftの状態の外観を無効にした場合。どうぞ。
barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.lightGray], for: .disabled)
次のcode
で確認してください。
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem * btnTemp = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(btnDone_Click:)];
[btnTemp setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor lightGrayColor], NSFontAttributeName:[UIFont boldSystemFontOfSize:16.0f]} forState:UIControlStateNormal];
[btnTemp setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blueColor], NSFontAttributeName:[UIFont systemFontOfSize:16.0f]} forState:UIControlStateDisabled];
[self.navigationItem setRightBarButtonItem:btnTemp];
}
- (void)btnDone_Click : (id)sender {
UIBarButtonItem * button = (UIBarButtonItem *)sender;
[button setEnabled:FALSE];
[self performSelector:@selector(enableButton:) withObject:sender afterDelay:2.0f];
}
- (void)enableButton : (id)sender {
UIBarButtonItem * button = (UIBarButtonItem *)sender;
[button setEnabled:TRUE];
}
.Normal
状態のバーボタンアイテムのタイトルテキスト属性を設定している可能性があり、.Disabled
状態にも設定する必要があります。
これを修正するには、2つの方法があります。1つはバーボタンアイテムインスタンスでタイトルテキスト属性を設定する場合、もう1つは外観プロキシを使用する場合です。
単一インスタンス:
saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)
外観プロキシ:
UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([MyNavigationController.self]).setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)
これにより、Swift 4.0の回答が更新されます。
barButtonItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.gray], for: UIControlState.disabled)
これは、白いbarTintColorに対して無効にされたオレンジ色の実例を示しています。
barTintColor = .white
cancelButton.isEnabled = false
cancelButton.setTitleTextAttributes(
[NSAttributedStringKey.foregroundColor: UIColor.orange],
for: UIControlState.disabled)
これは、iOSバージョン10. *で実行しているときの私の問題でもありました。ボタンの前景色を設定すると、問題が解決しました。
self.saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.gray], for: UIControlState.disabled)