我正在使用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/