2011-12-24 77 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