Ios5 iOS 5尝试从模式视图推送ViewController

Ios5 iOS 5尝试从模式视图推送ViewController,ios5,Ios5,我有一个iOS5标签应用程序,使用故事板 我的Tabbar控制器指向三个导航控制器 从其中一个角度看,流程如下所示: 开始视图-->照片视图(模式)-->目录视图 在照片屏幕上,我有一个带有以下代码的按钮: - (IBAction)acceptPhotoButtonPressed:(id)sender { UIViewController *catalogView = [self.storyboard instantiateViewControllerWithIdentifier:@"C

我有一个iOS5标签应用程序,使用故事板

我的Tabbar控制器指向三个导航控制器

从其中一个角度看,流程如下所示:

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

在照片屏幕上,我有一个带有以下代码的按钮:

- (IBAction)acceptPhotoButtonPressed:(id)sender {
    UIViewController *catalogView = [self.storyboard instantiateViewControllerWithIdentifier:@"CatalogView"];
    [self.navigationController pushViewController:catalogView animated:YES];
}
我曾尝试过使用
presentingViewController
parentViewController
——甚至键入将这些内容转换为
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


有什么办法可以解决这个问题吗?

从一个场景过渡到另一个场景的首选方式是Segue

您可以从该按钮或VC本身创建一个Segue,并将该Segue连接到您想要按下的场景。确保Segue属性设置为Push,然后在按钮的iAction(假设已连接到VC)中执行以下操作:

然后在prepareForSegue方法中:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString@"mySegueID"]) {
        //  Do whatever setup you need to do before firing the segue
    }
}
如果将Segue连接到按钮本身,则可以完全消除performSegue方法(您甚至不需要该iAction)。

只能从由
UINavigationController管理的视图控制器执行“推”式Segue。如果你试图这样做,否则什么也不会发生

您不应该像问题中所描述的那样以模态方式显示照片视图,而应该将UINavigationController的实例显示为模态视图,并使照片视图成为导航视图的根视图控制器。(这一切都可以通过故事板进行设置)。那么你的推送序列就行了

如果不希望顶部导航栏出现在第一个视图控制器(照片视图)上 您可以使用:

[self.navigationController setNavigationBarHidden:YES animated:NO]
这将隐藏顶部导航栏。推送新视图控制器后,如果希望导航栏在该视图控制器和任何后续视图控制器上重新出现,则必须在新视图控制器上将setNavigationBarHidden设置为“否”

[self.navigationController setNavigationBarHidden:NO animated:NO]

我两个都试过了,按下按钮什么也没发生。可能无法从模式视图中完成?只能从由UINavigationController管理的视图控制器中完成“推送”样式的segue。不要以模式显示照片视图,而是将UINavigation controller的实例显示为模式视图,并使照片视图成为导航视图的根视图控制器。“那么你的推送序列应该可以工作了。”琼克罗尔:看起来确实可以!是否可以避免模式照片视图上的顶部栏,同时在继续目录视图时仍显示?您可以使用[self.navigationController setNavigationBarHidden:YES animated:NO]。然后,您必须再次调用该选项,但如果您想在切换到该选项后显示该选项,请在Photo viewcontroller上将setNavigationBarHidden设置为“否”。您是否有通过故事板设置该选项的首选资源?设置新项目时,默认情况下,起始视图是UIView,而不是UINavigationView。如果有办法将UINavigationView设置为初始视图,那就太好了!
[self.navigationController setNavigationBarHidden:NO animated:NO]