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

最佳答案

基本上,UIActionSheet在调用actionSheet:clickedButtonAtIndex:的过程中阻塞了主线程(或至少与之交互),这可能是由于UITabBar或来自setTitle:的结果。

实际上,您正在安排performSelectorOnMainThread:withObject:waitUntilDone:NO任务,稍后再通过actionSheet:didDismissWithButtonIndex:调用来完成。这样就可以了。这非常相似,甚至与使用如下代码块不同:

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


如果该语法更适合您,那就太好了。

但是,有一种更简单的方法。只需使用委托方法UIActionSheet即可,顾名思义,当已经关闭时,将调用此方法,因此它将不再阻止您的其他调用。

关于iphone - 无法在actionSheet-delegate方法中设置tabBarItem-title,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8624065/

10-11 22:33
查看更多