无法在actionSheet-delegate方法中设置tabBarItem-title

时间:2011-12-24 10:53:35

标签: iphone ios uikit

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

1 个答案:

答案 0 :(得分:1)

基本上,UIActionSheet在调用actionSheet:clickedButtonAtIndex:期间阻止主线程(或者至少与其进行交互),这可能是由UITabBar提供的。

您实际上是通过setTitle:调用来安排稍后完成的performSelectorOnMainThread:withObject:waitUntilDone:NO任务。这将很好地工作。它与使用像这样的块非常相似,如果不相同:

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

如果这种语法更适合你,那就太好了。

但是有一种更简单的方法。只需使用委托方法actionSheet:didDismissWithButtonIndex:这个方法被调用,顾名思义,当UIActionSheet已被解雇时,所以它将不再阻止您的其他通话。