无法从 appdelegate 推送视图控制器
Posted
技术标签:
【中文标题】无法从 appdelegate 推送视图控制器【英文标题】:Cannot push viewcontroller from appdelegate 【发布时间】:2013-02-22 07:52:51 【问题描述】:在我的窗口基础应用程序中,当我单击 tabbarcontroller 的第二项时,我需要从我的 appdelegate 导航到 editorview,它将显示一个带有三个选项的操作表。
actionsheet 工作正常,如果您从标签栏中选择第二项,它将显示一个 actionsheet。
但是当我选择操作表的第一个选项时,我需要推送到另一个视图
我在 appdelegate 中声明我的操作表。
我已经实现了 actionsheetdelegate
(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex该方法被触发,它可以显示我是否执行 nslog。但它不能推送到我想要的视图控制器.. 这是我的代码:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
if (buttonIndex == 0)
DetailViewController *v2 = [[DetailViewController alloc] init];
NSLog(@"PUSH TRIGER");
[self.window.rootViewController.navigationController pushViewController:v2 animated:YES];
注意:我已经在我的故事板中嵌入了我的 tabbarcontroller 和导航控制器
【问题讨论】:
【参考方案1】:关于这个问题的答案充满了不好的答案。
我希望我的符合你的要求。
1.- 内部
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
// 1.- 首先:实例化navigationController。通常是rootviewcontroller
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
// 2.- 第二:实例化情节提要 // 它可能被标记为 MainStoryBoard。如果你改变了它,请小心
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
// 3.- 第三次实例化你要导航的 VC // 在我的特殊情况下,它被称为 IniciarSliderViewController 。不要忘记在 appdelegate 中导入它。还要注意正确标记。在我的情况下 MenuSlider
IniciarSliderViewController *controller = (IniciarSliderViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"MenuSlider"];
//4.- 最后一个,你现在可以像在 VC 中一样推送了
[navigationController pushViewController:controller animated:YES];
如果您还有问题,请不要犹豫
【讨论】:
工作,但导航丢失【参考方案2】:这样做
你为UITabBarController
分配了什么VC?我打赌UIViewController
?尝试分配UINavigationController
而不是UIViewController
合成UINavigationController *navController
;
self.navController = [[UINavigationController alloc] init];
SomeViewController *viewController = [[SomeViewController alloc] initWithNibName:@"SomeViewController" bundle:nil];
self.navController.viewControllers = [NSArray arrayWithObject:viewController];
UITabBarController *tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:
self.navController, nil]];
然后在你的行动表上
[self.navController pushViewController:v2 animated:YES];
编辑故事板
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
self.navController = (UINavigationController*) [storyboard instantiateViewControllerWithIdentifier:@"MyNavController"];
希望有帮助
【讨论】:
但是我已经在 storyboard 中嵌入了我的 tabbarcontroller 和导航,所以我没有再次声明我的 tabbarcontroller 我认为你是对的,也许我的故事板设计错了,我已经放了 segue 标识符和视图控制器标识符,但它仍然不起作用,请你检查我的故事板,我想推到红色圆圈中的视图控制器这是图片:i46.tinypic.com/5jz704.png 图片太小了,能看大点吗?【参考方案3】:而不是这个 self.window.rootViewController.navigationController
使用 UINavigationController 对象
【讨论】:
以上是关于无法从 appdelegate 推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章