【问题标题】:view controller pushed from navigation controller is not displayed从导航控制器推送的视图控制器不显示
【发布时间】:2012-01-23 00:45:26
【问题描述】:

我有一个导航视图控制器可以正确推送“viewController1”。然后,从“viewController1”调用goToApp函数以推送“appViewController”。函数 goToApp 已执行,但应用程序仍保留在同一视图“viewController1”中。怎么推?谢谢。

来自 viewController1:

 navigationViewController *theInstance = [[navigationViewController alloc] init];
    [theInstance goToApp];

在导航视图控制器中:

-(void)goToApp {

    appViewController *AppsViewController = [[appViewController alloc] initWithNibName:@"appViewController" bundle:nil];

    [[self navController] pushViewController:AppsViewController animated:YES];

    [AppsViewController release];

}

goToApp 已执行,但 appViewController 未启动。

【问题讨论】:

    标签: objective-c ios xcode cocoa-touch uinavigationcontroller


    【解决方案1】:

    您不应在 viewController1 中创建新的 UINavigationController。您应该通过属性navigationController 获得它。该属性将返回在其堆栈上具有 UIViewController 的 UINavigationController(如果有,则可以为 nil)。

    UINavigationController * theInstance = self.navigationController;
    [theInstance goToApp];
    

    参见:http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html 属性 navigationController。

    除此之外,将指针正确命名为它们所代表的内容是一个更好的约定。我建议将 theInstance 重命名为 currentNavigationController 或只是 navigationController。

    【讨论】:

    • 抱歉,没听懂。我没有在 viewController1 中创建新的导航控制器。 viewController1 调用在 navigationViewController(主导航控制器)中实现的函数。这个函数应该像我之前推送的 viewController1 一样推送 appViewController。
    • 对不起,我误解了你的问题。看起来你做了一个复杂的结构,有多个可能的错误。关于navigationViewController * theInstance,它是否有一个应该推送新的UIViewControllers 的观点?我认为我之前的回答仍然成立,因为您创建了一个新的 UINavigationController 而不是重用它。在viewController1 中,您会得到一个新的(以及其他)UINavigationController,然后是推送viewController1 的那个。
    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多