2012-08-13 35 views

回答

0

UITabBarControllerDelegate documentation

tabBarController:didSelectViewController:

「[..]它只是響應標籤欄用戶水龍頭打來電話,當你的代碼更改標籤欄內容編程不叫「。

因此,我建議你找到另一種方法來實現所需的功能。

一種選擇是將你擁有的任何邏輯tabBarController:didSelectViewController:在您的視圖控制器的另一種方法,並調用該方法都在您的UITabBarController實例運行setSelectedIndex委託方法(上圖),並在你的代碼。

+0

對不起,我沒有得到完全ü。你可以粘貼示例代碼 – 2012-08-13 10:17:07

+0

不是沒有看到你的問題的上下文。你需要在你的類中創建一個新的方法,當你調用'setSelectedIndex'時調用它,或者直接在你調用'setSelectedIndex'處直接包含任何邏輯。總之'setSelectedIndex'永遠不會觸發'didSelectViewController',也不應該嘗試以編程方式調用該委託方法。您需要考慮替代解決方案。 – jstr 2012-08-13 10:58:37

+0

實施,但我現在崩潰 2012-08-13 16:44:12.979 iOSFileShare [33922:207] ***由於未捕獲異常'NSInternalInconsistencyException',原因終止應用程序:'嘗試開始從< UINavigationController:0x560ba00>到,而轉換已在進行中。等待viewDidAppear/viewDidDisappear知道當前轉換已完成' ***首次調用堆棧: – 2012-08-13 11:25:27

0

如果需要每當標籤無論它來自水龍頭的變化做出反應,我建議壓倒一切的setSelectedIndex:

-(void)setSelectedIndex:(NSUInteger)selectedIndex 
{ 
    [super setSelectedIndex:selectedIndex]; 
    [self handleSelectionChanged]; 
} 

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    [self handleSelectionChanged]; 
} 

- (void)handleSelectionChanged 
{ 
    // Do something 
}