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;});哇!很有效,非常感谢。你能告诉我为什么会这样吗?很抱歉插嘴,但那是对的。您不能从未在主线程队列中运行的其他线程更改视图。也许能解释得更好一点。