web-dev-qa-db-ja.com

UIBarButtonItemは無効になっていますが、通常の色です

UIBarButtonItemに問題があります。外観プロキシを使用して、状態NormalおよびDisabledの色を設定し、これをviewDidLoadUIViewControllerメソッドで行います。ただし、ボタンが無効になっている場合でも、ボタンはNormalの色になります(また、IBActionメソッドが呼び出されていないため、ボタンは確実に無効になっています)。

質問はこれに似ています 無効にされたuibarbuttonitemのテキストの色は常に通常の状態の色です 、しかし、ここに投稿された解決策は私にはうまくいきません。

私のアプリはiOS8.2用で、Xcode6.2を使用しています

何か案は?

[〜#〜] edit [〜#〜]:これが解決策を見つけるのに役立つかどうかはわかりませんが、ボタンを作成するときにinitWithImage: の代わりに initWithTitle:すべてがうまく機能しているようです。これはAppleバグですか?

15
Banana

それでようやくこれを正常に機能させることができました。問題は、UIBarButtonItemsの色を2回設定していたことでした。1回は[navBar setTintColor:]を使用し、もう1回は外観プロキシを使用していました。外観プロキシだけを残すことで問題は解決します。

5
Banana

スウィフト4

Barbuttonitemを変更する方法を探している人がSwiftの状態の外観を無効にした場合。どうぞ。

barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.lightGray], for: .disabled)
29
Swift Hipster

次の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];
}
6
Abhishek Sharma

.Normal状態のバーボタンアイテムのタイトルテキスト属性を設定している可能性があり、.Disabled状態にも設定する必要があります。

これを修正するには、2つの方法があります。1つはバーボタンアイテムインスタンスでタイトルテキスト属性を設定する場合、もう1つは外観プロキシを使用する場合です。

単一インスタンス:

saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)

外観プロキシ:

UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([MyNavigationController.self]).setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)
2
Kyle Clegg

これにより、Swift 4.0の回答が更新されます。

barButtonItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.gray], for: UIControlState.disabled)

これは、白いbarTintColorに対して無効にされたオレンジ色の実例を示しています。

enter image description here

barTintColor = .white    
cancelButton.isEnabled = false
cancelButton.setTitleTextAttributes(
    [NSAttributedStringKey.foregroundColor: UIColor.orange], 
    for: UIControlState.disabled)
1
CodeBender

これは、iOSバージョン10. *で実行しているときの私の問題でもありました。ボタンの前景色を設定すると、問題が解決しました。

self.saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.gray], for: UIControlState.disabled)
0
tab67