2012-04-05 47 views
1

我有一个iOS 5选项卡式应用程序,使用故事板。iOS 5试图pushViewController从模态视图

我的选项卡控制器指向三个导航控制器。

从他们中的一个,流看起来是这样的:

开始视图 - >照片视图(模式) - >目录视图

在照片屏幕,我有以下按钮代码:

- (IBAction)acceptPhotoButtonPressed:(id)sender { 
    UIViewController *catalogView = [self.storyboard instantiateViewControllerWithIdentifier:@"CatalogView"]; 
    [self.navigationController pushViewController:catalogView animated:YES]; 
} 

我试着打打闹闹与presentingViewControllerparentViewController - 甚至键入铸造那些到UINavigationController。这导致其崩溃,并显示以下错误消息:

2012-04-06 00:32:45.808 myapp[19345:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController pushViewController:animated:]: unrecognized selector sent to instance 0x18d0d0' 

这样告诉我,我还没有得到一个UINavigationController的保持,但UITabBarController

有没有解决这个办法吗?

回答

4

“推”式SEGUE只能从正由一个UINavigationController管理的视图控制器完成。如果你试图这样做,否则什么都不会发生。

而不是像你在你的问题中描述的那样模态地显示你的照片视图,你应该显示一个UINavigationController的实例作为模态视图,并使照片视图成为导航视图的根视图控制器。 (这可以通过故事板来设置)。然后你的push segue会起作用。

如果您不希望在顶部导航栏来显示你的第一个视图控制器(图片视图)和 你可以使用:

[self.navigationController setNavigationBarHidden:YES animated:NO] 

这将隐藏顶部导航栏。一旦你把一个新的视图控制器,如果你想要的导航栏,以重新出现在一个和任何后续视图控制器,你必须setNavigationBarHidden设置为NO在新的ViewController。

[self.navigationController setNavigationBarHidden:NO animated:NO] 
+0

您是否有首选资源可以通过故事板进行设置?当我设置一个新项目时,默认情况下起始视图是UIView,而不是UINavigationView。如果有一种方法可以将UINavigationView设置为初始视图,那么很高兴看到! – Danny 2013-01-30 07:51:30

-1

Segue公司的转变是从一个场景到另一个场景的首选方式。

您既可以创建从按钮,或从VC本身Segue公司和SEGUE连接到你要推的情景。确保Segue公司属性设置为推,然后在按钮的IBAction为(假设你连接到VC)做到这一点:

- (IBAction)acceptPhotoButtonPressed:(id)sender { 
    [self [email protected]"mySegueID" sender:nil]; 
} 

然后在prepareForSegue方法:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier [email protected]"mySegueID"]) { 
     // Do whatever setup you need to do before firing the segue 
    } 
} 

如果连接继续关注按钮本身,然后完全消除performSegue方法(您甚至不需要IBAction)。

+0

我都尝试,当我按下按钮没有任何反应。也许它不能从模态的角度来完成? – MartinHN 2012-04-05 22:52:30

+1

“推”风格segue只能从UINavigationController管理的视图控制器完成。不是以模态方式显示照片视图,而是将UINavigation控制器的实例显示为模式视图,并使照片视图成为导航视图的根视图控制器。然后你的push segue应该可以工作。 – jonkroll 2012-04-05 23:03:29

+0

@jonkroll这似乎工作!任何方式,我可以避免模式照片视图上的顶部酒吧,同时仍然显示我何时继续目录视图? – MartinHN 2012-04-05 23:10:09