2011-12-24 80 views
0

我使用UIActionSheet的方法showFromTabBar:来显示操作表。在代理方法actionSheet:clickedButtonAtIndex:中,我尝试通过调用[email protected]"New Title"来更改当前的UITabBarItem的标题,其中self是当前的TabBarController的ViewController。当我这样做时,TabBarItem的标题变成一个空字符串(“”)。当我在动作表的委托方法中发布NSNotification,并尝试以相同方式更改通知处理程序方法中的标题时,应用程序崩溃(在控制台上没有任何输出)。但是当我拨打[self.tabBarItem performSelectorOnMainThread:@selector(setTitle:) withObject:@"New Title" waitUntilDone:NO]时,它适用于两种变体。这是SDK中的一个错误,不是吗?无法在actionSheet委托方法中设置tabBarItem标题

回答

1

基本上,UIActionSheet在调用actionSheet:clickedButtonAtIndex:的过程中阻塞了主线程(或至少与它交互),可能是由UITabBar提供/显示的结果。

您基本上正在调度setTitle:任务,稍后将完成performSelectorOnMainThread:withObject:waitUntilDone:NO调用。这将工作得很好。它与使用如下块非常相似:

dispatch_async(dispatch_get_main_queue(), ^{ 
    self.tabBarItem.title = @"New Title"; 
}); 

如果该语法适合您,那么这很好。

但有一个更简单的方法。只需使用委托方法actionSheet:didDismissWithButtonIndex:就可以调用此方法,顾名思义,当UIActionSheet已被解除时,它将不再阻止其他呼叫。

+0

+1,因为它适用于didDismissWithButtonIndex:方法。但是你的“封锁主线”解释并不令人满意。 “封锁”一词的含义是什么,为什么禁止(立即)设置一个简单的标题属性? – 2011-12-29 07:02:55