通过UITabBarController调用UIViewController进行推送
Posted
技术标签:
【中文标题】通过UITabBarController调用UIViewController进行推送【英文标题】:calling UIViewController through UITabBarController for push 【发布时间】: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?
谢谢。
【问题讨论】:
【参考方案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;
希望它能解决您的问题....
【讨论】:
以上是关于通过UITabBarController调用UIViewController进行推送的主要内容,如果未能解决你的问题,请参考以下文章
通过UITabBarController调用UIViewController进行推送
UIScrollView 在带有自动布局的 UITabBarController 中有一个无法解释的位置
UITabBarController 委托方法永远不会被调用
在 UITabBarController 内未调用 cellForRowAtIndexPath