pushViewController无法正常工作

ORL*_*ORL 0 iphone objective-c ios

我对Objective-C和iPhone编程很新,所以如果这是一个新手问题,我很抱歉.我有一个简单的应用程序需要从一个视图到另一个视图.第一个视图是UIViewController.我在IB中设置了xib文件(即将一些按钮拖到窗口上)并连接所有按钮(这些按钮都可以工作).然后我创建了另一个xib文件和类(也是一个UIViewController)并将它们连接起来.在第一个视图中按下按钮时,我想加载第二个视图.这是应该推动视图的代码:

-(IBAction)createAccount:(id)sender{
    CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil];
    [self.navigationController pushViewController:acctView animated:YES];
    [acctView release];
}
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用.当我将print语句放在createAccount方法中时,那些是打印的(我可以多次单击该按钮并且它永远不会崩溃)但是从不推动acctView.当我打印出self.navigationController的值时,它返回null.它甚至更奇怪,因为如果我以模态方式呈现acctView,那么它的工作原理.

-(IBAction)createAccount:(id)sender{
    CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil];
    [self presentModalViewController:acctView animated:YES];
    [acctView release];
Run Code Online (Sandbox Code Playgroud)

}

这工作得很好,但我不想以模态方式使用视图.我完全迷失在这里.在过去的几个小时里,我遇到过很多帖子,说要用UINavigationController做一些事情并将其挂钩到我的视线,但我该怎么做?任何帮助是极大的赞赏!谢谢.

ser*_*gio 7

您似乎还没有为您的应用创建UINavigationController.

最好的事情是从头开始使用新的Xcode项目,负责选择基于导航的应用程序.通过这种方式,您几乎可以获得为您设置的所有内容.

如果您不喜欢这种方法,可以通过编程方式创建UINavigationController.在这里,您可以找到相关的教程.

如果您更喜欢更直接的指示,那么它们是:

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

     MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil];
     self.navigation = [[[UINavigationController alloc] initWithRootController:overviewViewController] autorelease];
     [overviewViewController release];

     [window addSubview:[navigation view]];
     [self.window makeKeyAndVisible];

     return YES;
}
Run Code Online (Sandbox Code Playgroud)

self.navigationretainappDelegate中的ed属性.

编辑:

这个答案很旧,因此更新:

  1. 如果您使用的是ARC,那么您应该使用strong(vs. retain)属性,而您不需要autorelease;

  2. 如果您的目标是iOS> 4.0(上面的含义也暗示),您可以使用该rootViewController属性UIWindow并说:

     MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil];
     self.window.rootViewController = [[[UINavigationController alloc] initWithRootController:overviewViewController] autorelease];
     [overviewViewController release];
    
     [window addSubview:[self.window.rootViewController view]];
     [self.window makeKeyAndVisible];
    
    Run Code Online (Sandbox Code Playgroud)

    不需要任何navigation财产.