2010-03-03 123 views
2

當我用我的UITabBarController委託它不工作的任何一個可以幫助我, ..TabBarController委託不工作

我叫這樣的委託方法..

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

[self.navigationController popToRootViewControllerAnimated:NO]; 
} 
+0

什麼是不工作?什麼都沒有發生,或者它會崩潰?你有沒有在方法中加入一個斷點來判斷它是否被調用或者是你的問題?我們需要更多信息:) – deanWombourne 2010-03-03 08:29:30

+0

您是否正確添加委託? – willcodejavaforfood 2010-03-03 08:47:17

+0

提問時請具體。如果你在幾天後看看你的問題,它會讓你感到困惑:)。所以請在提問時提供更多信息,以便您可以得到您想要的內容:) – Manjunath 2010-03-03 13:56:12

回答

0

Read the documents到深入瞭解導航控制器,TabBar控制器以及視圖和導航層次結構之間的關係。

然後查看您提供的代碼。哪個視圖/控制器是容器?你正在彈出self的navigationController,這與tabBarController不一樣。我不認爲你真的需要這種方法,如果你想切換標籤。

嘗試註釋掉此方法。它是UITabBarController委託協議中的可選方法。如果你註釋掉它,你應該得到tab控制器的默認行爲,這應該是選擇適當的viewController並切換到新的視圖。

如果您希望在視圖控制器之間切換時採取一些操作,通常只需要使用此方法。

1

這可以幫助你

-(void)applicationDidFinishLaunching:(UIApplication *)application { 
    tabBarController.delegate=self; 
    // Add the tab bar controller's current view as a subview of the window 
    [window addSubview:tabBarController.view]; 
} 
0

在.h文件中

指定

UITabbarcontrollerDelegate然後

-(void)applicationDidFinishLaunching:(UIApplication *)application { 

tabBarController.delegate=self; 

// Add the tab bar controller's current view as a subview of the window 
[window addSubview:tabBarController.view]; 
} 
12

如果你正在做的是繼承一個的UITabBarController,然後。奇怪的是......你可以通過設置自己作爲一個委託來工作:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.delegate = self; 
} 

然後didSelectViewController動作通常會火:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    NSLog(@"View Changed"); 
} 

不要忘了你的UITabBarControllerDelegate類添加到您的.h文件中:

@interface MyTabBarController : UITabBarController <UITabBarControllerDelegate> 

@end 
+1

是的,它確實似乎違反直覺,控制器需要代理人,特別是當該代理人也是代理人時 – HairOfTheDog 2013-04-06 02:39:55

+0

我遵循上述步驟,但沒有成功.i'm以編程方式處理uitabbar。 – Akhtar 2014-02-27 19:20:08

2

如果您使用的標籤欄通過擴展UITabBarController進行自定義,並嘗試以編程方式更改選項卡欄選定的索引,然後它不會調用委託。

請參閱 「UITabBarDelegate」 裏面注:

// Note: called when a new view is selected by the user (but not programmatically) 
+1

對於與此代表無關的大多數問題,這是正確的答案。 +1 – 2016-08-23 14:27:25