UIBarButtonItem is disabled, but has normal color

前端 未结 6 1180
失恋的感觉
失恋的感觉 2021-02-12 19:25

I\'m having an issue with a UIBarButtonItem. I use the appearance proxy to set its color for states Normal and Disabled and I do this in t

相关标签:
6条回答
  • 2021-02-12 19:45

    You have likely set the bar button item title text attributes for the .Normal state and need to also set it for the .Disabled state.

    There are two ways to fix this, one if you are setting the title text attributes on the bar button item instance and in the other case if you use the appearance proxy.

    Single instance:

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

    Appearance proxy:

    UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([MyNavigationController.self]).setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)
    
    0 讨论(0)
  • 2021-02-12 19:52

    So I finally managed to get this working as it should, and the problem was that I was setting the color of UIBarButtonItems twice, once using [navBar setTintColor:] and once using the appearance proxy. Leaving just the appearance proxy solves the problem.

    0 讨论(0)
  • 2021-02-12 20:01

    Check with following 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];
    }
    
    0 讨论(0)
  • 2021-02-12 20:03

    Swift 4

    If someone looking for how to change barbuttonitem disabled state appearance in swift. Here you go.

    barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.lightGray], for: .disabled)
    
    0 讨论(0)
  • 2021-02-12 20:05

    This updates the answer for Swift 4.0:

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

    This shows an illustrative example of an orange color for disabled against a white barTintColor:

    barTintColor = .white    
    cancelButton.isEnabled = false
    cancelButton.setTitleTextAttributes(
        [NSAttributedStringKey.foregroundColor: UIColor.orange], 
        for: UIControlState.disabled)
    
    0 讨论(0)
  • 2021-02-12 20:07

    This was also my issue, when running on iOS versions 10.*. Setting the button's foreground color solved the issue for me.

    self.saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.gray], for: UIControlState.disabled)
    
    0 讨论(0)
提交回复
热议问题