簡體   English   中英

檢測何時從App Delegate通過UITabBarController按下tabBar項

[英]detect when a tabBar item is pressed via UITabBarController from App Delegate

我知道這個問題已被問過幾次,但是當我在我的AppDelegate類中使用我的UITabBarController並且viewControllers只在那里設置時,我仍然堅持這個案例

self.tabBarController.viewControllers = 
     @[aboutUsNavController,myProfileNavController,
      projectsListNavController, feedsNavController,homeViewController];

現在我想要的是在TabBar項目feedsNavController點擊不在 viewWillAppear執行任務(因為它通過navigationController推送detailView )。

我在同一個類中設置了委托來執行UITabBarController委托方法:

 AppDelegate *appDelegate = 
         (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.tabBarController.delegate = self;

但是-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController僅在我切換TabBar項時有效, 但不是第一次

我有什么方法可以調用UITabBarDelegate

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

為了在tabBar item被按下時獲得參考?

或任何其他方法將不勝感激。

弄清楚這樣做的方法:

實際上UITabBarControllerDelegate方法只在它加載的特定選項卡被調用。

因此,我執行了任務[self getFeedsFromServer]; viewDidLoad (第一次),然后再次進入

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"Selected INDEX OF TAB-BAR ==> %i", tabBarController.selectedIndex);

    if (tabBarController.selectedIndex == 3) {
      [self getFeedsFromServer];
    }
}

像我想的那樣工作!

如果您想執行任務1次,那么ViewDidLoad最適合它。 每次ViewController聚焦時ViewWillAppear都會調用,但只要在堆棧上推送Controller時就會調用ViewDidLoad。

你是什​​么意思'因為它通過navigationController推送一個detailView'? 你的問題不是那么清楚。

但也許這件事我可以通過我的理解來幫助你:

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

        NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController];
        NSLog(@"Tab index = %u (%u)", indexOfTab);

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM