Ios 伊巴布顿主义不';t在启用后更改默认蓝色

Ios 伊巴布顿主义不';t在启用后更改默认蓝色,ios,objective-c,uibarbuttonitem,Ios,Objective C,Uibarbuttonitem,在我的代码中,我有: @property (weak, nonatomic) IBOutlet UIBarButtonItem *btnStart; 然后: - (void)viewDidLoad { [super viewDidLoad]; self.btnStart.enabled = NO; } 按钮的颜色变为灰色,如果我触摸它,什么也不会发生,这是正确的。我还有一段代码: -(void)session:(MCSession *)session peer:(MCPee

在我的代码中,我有:

@property (weak, nonatomic) IBOutlet UIBarButtonItem *btnStart;
然后:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.btnStart.enabled = NO;
}
按钮的颜色变为灰色,如果我触摸它,什么也不会发生,这是正确的。我还有一段代码:

-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state {
    if (state == MCSessionStateConnected) {
        NSLog(@"I'm connected to peer '%@'", peerID.displayName);
        self.btnStart.enabled = YES;
    }
 }

问题是,在我触摸按钮之前,按钮不会改变颜色。NSLog工作得很好。

您需要更新主线程上的UI元素

这样做:

dispatch_async(dispatch_get_main_queue(), ^{ 
  //add the needed code below
  self.btnStart.enabled = YES; 
});

您是否尝试过使用
[self.btnStart setEnabled:YES]
?按钮似乎处于活动状态,但不要更改其样式。也许这是在
启用的
设置中完成的,方式相同。我还尝试了self.btnStart.tintColor=[UIColor redColor];但直到我触摸它,它才改变颜色……您是否尝试执行这一行self.btnStart.enabled=YES;在主线上?如下所示:dispatch_async(dispatch_get_main_queue(),^{self.btnStart.enabled=YES;});哇!很有效,非常感谢。你能告诉我为什么会这样吗?很抱歉插嘴,但那是对的。您不能从未在主线程队列中运行的其他线程更改视图。也许能解释得更好一点。