【问题标题】:calling UIViewController through UITabBarController for push通过UITabBarController调用UIViewController进行推送
【发布时间】:2014-02-18 08:42:06
【问题描述】:

在我的应用程序中,我将 UINavigationController 作为初始视图, 层次是这样的

UINavigationController-->LoginViewController -->UITabBarController-->UINavigationController -->MasterViewController

MasterViewController 本身就有 tableView

当推送通知到来时,我在应用程序在后台运行时单击推送通知,然后应用程序打开 masterViewController,问题是当我从推送通知打开应用程序时,我想更新 MasterviewController 中的 tableList。

我尝试像这样从 AppDelegate 导航到 MasterViewController

 -(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    UINavigationController * navController = (UINavigationController *) self.window.rootViewController;

    MasterViewController * masterController = [navController.viewControllers objectAtIndex:0];

    [masterController updateList];

    }

它不起作用,我如何在收到推送时更新 MasterViewController?

谢谢。

【问题讨论】:

    标签: ios iphone objective-c uiviewcontroller


    【解决方案1】:

    这也可以。

    -(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        MasterViewController * masterController = [storyboard instantiateViewControllerWithIdentifier:@"Your_StoryboardID"];
    [masterController updateList];
    }
    

    【讨论】:

      【解决方案2】:

      你应该这样尝试:

      UINavigationController * navController = (UINavigationController *) self.window.rootViewController;
      for (id viewController in navController.viewControllers) {
          if ([viewController isKindOfClass:[MasterViewController class]]) {
      
                    MasterViewController * masterController = (MasterViewController*) viewController; 
                    [masterController updateList];
                   break;
          }
      }
      

      【讨论】:

      • 我尝试了代码,但在 for 语句中 viewController 总是作为设置视图出现。所以它无法到达 if 语句。
      • 如果您的MasterViewController 存在于UINavigationController 中,它应该可以工作。
      【解决方案3】:
      UINavigationController * navController = (UINavigationController *) self.window.rootViewController;
      
      MasterViewController * masterController = [navController visibleViewController];
      if ([viewController isKindOfClass:[masterController class]]) {
          [masterController updateList];
      }
      eles{
         //Hierarchy maybe not as your description
      }
      

      【讨论】:

        【解决方案4】:

        获取标签栏视图控制器并使用 pop 调用该视图方法...

            NSArray *array=[self.tabBarViewController viewControllers];
        
                            for(int i=0;i<array.count;i++)
                            {
        
                                UINavigationController *navCont=[array objectAtIndex:i];
                                NSArray *navArray=[navCont viewControllers];
                                for (id view in navArray)
                                {
                                    if ([view isKindOfClass:[MasterViewController class]])
                                    {
                                        MasterViewController * masterController =        (MasterViewController*) viewController; 
                                         [masterController updateList];
        
        //if you want to pop to that view controller then use below two lines of code else put comments..
        
                                        [self.tabBarViewController setSelectedIndex:0]; 
                                        [navCont popToRootViewControllerAnimated:YES];
                                    }
                                    break;
                                 }
                           }
        

        希望它能解决您的问题....

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多