2011-03-20 58 views
5
的「多」的觀點

我如何可以管理中的UITabBar一樣的「多」觀點的用戶選擇?我有這樣的代碼來管理UITabBarItems選擇:選擇指數中的UITabBar一樣

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {  
    if (!(viewController == tabBarController.moreNavigationController)) { 
     int index = tabBarController.selectedIndex; 
     [[DataManager sharedInstance] setCurrentTabbarIndex:index]; 
    } 
} 

它工作正常的可見UITabBarItems,但是當用戶從「更多」視圖中選擇一些項目我從來沒有了解這一點。有什麼方法可以捕捉「更多」視圖的用戶選項?謝謝!

回答

2

一個的UITabBarController的「更多」視圖獨立於其他視圖處理。蘋果對此主題的討論如下:

['moreNavigationController']屬性始終包含有效的More導航控制器,即使屏幕上未顯示更多按鈕。 你可以使用這個屬性的值來選擇標籤欄界面的更多導航控制器或將其對當前選擇的視圖控制器比較。

不要手動添加該屬性中存儲到你的標籤欄接口的對象。根據需要,更多控制器將由標籤欄控制器自動顯示。您還不能在存儲在viewControllers屬性中的視圖控制器數組中查找更多導航控制器。標籤欄控制器不包含該對象數組中的更多導航控制器。

從我倒覺得,你可以這樣做判斷:

int index = tabBarController.selectedIndex; 
if (tabBarController.selectedViewController == 
    tabBarController.moreNavigationController) { 
    index = -1; //assign some placeholder index for the "More" controller 
} 
+0

更視圖控制器具有一個UITableView,我需要一些細胞被觸摸時執行一些代碼。換句話說,我需要爲「更多視圖控制器」擁有的UITableView管理「didSelectRowAtIndexPath」方法。你不知道是否有辦法做到這一點? – Sebastian 2011-03-20 01:16:45

+0

啊,我不知道你是否可以直接做到這一點。也許你可以繼承UITabBarController並提供一個使用自定義「更多」視圖控制器的實現,它允許你處理行選擇。或者,也許更簡單的選擇是將'[[DataManager sharedInstance] setCurrentTabbarIndex:index];'調用您的視圖控制器'viewWillAppear'方法。 – aroth 2011-03-20 03:37:28

+0

我有很多搜索,我還沒有解決方案。我無法移動[[DataManager sharedInstance] setCurrentTabbarIndex:index];到viewDidLoad,因爲該視圖需要與UITabBar上的選定項關聯配置。無論如何,我會想一些其他的解決方案。謝謝!! – Sebastian 2011-03-20 03:55:59

0

無論視圖被選中將收到viewWillAppear:animated:

在每一個真實的你的標籤欄控制視圖提供這個,因此即使從「更多」控制器創建,您也可以提取用戶選擇的身份。

您可以在此方法中保存標籤欄狀態,或者您可以將您的視圖的參考返回標籤欄並通知。

2

一個很晚的答案很古老的問題,但在這裏它是無論如何,以防有人絆倒在此。

的解決方案是給自己分配爲「更多」導航控制器的委託。你已經擁有了採用UITabBarControllerDelegate協議的類,所以.h文件可能是這樣的:

@interface MyDelegate : NSObject <UITabBarControllerDelegate, UINavigationControllerDelegate> 
{ 
} 

無論你是作爲委託指定類,這樣做:

- (void) assignDelegate:(MyDelegate)myDelegate toTabBarController:(UITabBarController*)tabBarController 
{ 
    tabBarController.delegate = myDelegate; 
    tabBarController.moreNavigationController.delegate = myDelegate; 
} 

最後,在您的代理類中添加這個方法:

- (void) navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated 
{ 
    // add code to handle the event 
} 

注意,當您更改標籤編程關你的委託方法被調用。