pushViewController 不会导致新控制器绘制视图

Posted

技术标签:

【中文标题】pushViewController 不会导致新控制器绘制视图【英文标题】:pushViewController does not cause new controller to draw view 【发布时间】:2011-10-03 05:08:58 【问题描述】:

前言:我没有使用 *.xib 文件。

我在一个有效地充当我的“rootViewController”的类中实例化了一个 UINavigationController。这个“rootViewController”还有两个 UITableViewController 成员,它们绘制在 iPad 屏幕的不同部分。其中之一被设置为导航控制器的根视图。我们称它为 tableViewControllerA。

问题是,当我在有效的 UINavigationController 上调用 pushViewController 时,我看不到任何效果: [tableViewControllerA.navigationController pushViewController:tableViewControllerX 动画:YES];

我从我今天搜索的帖子中收集到,这个推送方法应该反过来导致屏幕重绘堆栈控制器视图的顶部。这不是我看到的。

在我的实现中似乎存在脱节,是时候在我的环境(xcode 4.0)中引用一个工作示例了。假设罐装模板将提供一个工作基础,我创建了一个新的基于导航的应用程序。我简单地修改了 didFinishLaunchingWithOptions: 如下。

    UIViewController *view1 = [[UIViewController alloc] init];
    UIViewController *view2 = [[UIViewController alloc] init];

    view1.title = @"view1";
    view2.title = @"view2";

    [self.navigationController pushViewController:view1 animated:YES];
    [self.navigationController pushViewController:view2 animated:YES];

    self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:view1];

    [view1 release];
    [view2 release];

我发现了类似的结果。当我启动模拟器时,屏幕标题会读取 self.window.rootViewController 指向的任何内容的标题。使用原样的代码,生成的顶部屏幕的标题为“view1”。当我 initWithRootViewController:view2 时,生成的顶部屏幕显示为“view2”。

所以请告诉我我很愚蠢,因为 xyz... 谢谢。

【问题讨论】:

请输入代码!我需要你如何启动 navigationController 以及你如何推送你的视图。 对不起。我是新来的。我不是故意提交的。请参阅修改后的帖子。 【参考方案1】:

以下是一些参考和建议:

基于导航的应用程序的简单教程:

http://humblecoder.blogspot.com/2009/04/iphone-tutorial-navigation-controller.html

这是另一个创建逐步导航控制器并添加视图的方法:

http://www.icodeblog.com/2008/08/03/iphone-programming-tutorial-transitioning-between-views/

这里使用导航+标签栏控制器有点进步: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CombiningToolbarandNavigationControllers/CombiningToolbarandNavigationControllers.html

【讨论】:

当我调用 [window addSubview:[navigationController view]];如果可能的话,我想避免这种情况。你知道有没有替代品?或者我想更好的问题是 addSubview 完成了什么导致绘制顶视图而不是根视图(从导航控制器的角度来看)? 在窗口中您只能添加任何子视图,然后您可以完全控制它。如果您不知道,请让我了解一下:Window 是一种容器,您可以在其中放置一些视图(添加子视图)并将其用于应用程序的自定义外观。现在这些视图可以是简单的 UIView、NavigationController 的视图、TabBarController 的视图等。现在,一旦您将一个视图放入容器中,您就已经添加了视图(在您的情况下为导航控制器),所以继续使用添加的视图。 是说只能通过addSubview“在容器中放一个视图”吗? 我想问的是,除了addSubview还有其他的替代方案来完成导航控制器的正确功能效果吗?谢谢。 正确功能是什么意思?您是否浏览过链接并创建了应用程序?它是功能齐全的示例,插图精美,即使您下载代码也可以看到功能齐全的代码……您是说您需要***中的完整代码吗?来吧...开始编写代码,而不是期望其他人完成所有事情。【参考方案2】:

没有看到你的代码,我有两个理论:

    当你进行推送时,你的语法和调用是错误的。以此为模型:

    -(void)Examplemethod 
        AnotherClassViewController *viewController = [[[AnotherClassViewController alloc] initWithNibName:@"AnotherClassView" bundle:nil] autorelease];
    
        [self.navigationController pushViewController:viewController animated:YES];
    
    

    您永远不会将导航控制器添加到视图层次结构中,而视图层次结构也不会添加视图。看看this。

【讨论】:

当我不使用 nib 时,是否有理由调用 initWithNibName?

以上是关于pushViewController 不会导致新控制器绘制视图的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 不会 pushViewController

“pushViewController”到自己的类,然后是“performSegueWithIdentifier”,导致“接收者没有标识符的segue”

Swift pushViewController 导致应用程序崩溃

pushViewController 在不同场景中调用时会导致不同的行为

UIKit pushViewController:animated: 上的调用会导致最终的堆栈溢出(或其他异常)吗?

iOS解决使用模态视图 导致无法pushViewController