Iphone pushViewController不工作
我对Objective-C和iPhone编程相当陌生,所以如果这是一个新手问题,我很抱歉。我有一个简单的应用程序,需要从一个视图转到另一个视图。第一个视图是UIViewController。我在IB中设置了xib文件(即,将一些按钮拖到窗口上),并连接了所有按钮(所有按钮都可以工作)。然后我创建了另一个xib文件和类(也是一个UIViewController),并将它们连接起来。在第一个视图中按下按钮时,我想加载第二个视图。下面是应该推动视图的代码:Iphone pushViewController不工作,iphone,objective-c,ios,Iphone,Objective C,Ios,我对Objective-C和iPhone编程相当陌生,所以如果这是一个新手问题,我很抱歉。我有一个简单的应用程序,需要从一个视图转到另一个视图。第一个视图是UIViewController。我在IB中设置了xib文件(即,将一些按钮拖到窗口上),并连接了所有按钮(所有按钮都可以工作)。然后我创建了另一个xib文件和类(也是一个UIViewController),并将它们连接起来。在第一个视图中按下按钮时,我想加载第二个视图。下面是应该推动视图的代码: -(IBAction)createAccou
-(IBAction)createAccount:(id)sender{
CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil];
[self.navigationController pushViewController:acctView animated:YES];
[acctView release];
}
但这没有任何作用。当我在createAccount方法中放入print语句时,这些语句将被打印(我可以多次单击该按钮,它不会崩溃),但acctView从未被按下。当我打印出self.navigationController的值时,它返回null。更奇怪的是,如果我以某种方式呈现acctView,它就会起作用
-(IBAction)createAccount:(id)sender{
CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil];
[self presentModalViewController:acctView animated:YES];
[acctView release];
}
这工作得很好,但我不想使用视图模式。我在这里完全迷路了。在过去的几个小时里,我遇到了很多帖子,说要用UINavigationController做点什么,然后把它和我的视图连接起来,但是我该怎么做呢?非常感谢您的帮助!谢谢。您似乎还没有为应用程序创建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;
}
其中,self.navigation
是appDelegate中的retain
ed属性
编辑:
此答案非常陈旧,因此需要更新:
strong
(与retain
)属性,而不需要自动释放
UIWindow
中的rootViewController
属性并说:
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];
无需任何导航
属性你确定你有导航控制器吗?尝试NSLog(@“%@”,self.navigationController);当我这样做时,它会打印self.navigationController为空。这是多年来我在Stack Overflow中看到的“为什么我的pushViewController不工作”类型问题的最佳答案。简洁明了。谢谢塞吉奥,这是不对的。您应该使用self.window.rootViewController=navigation;然后释放导航,而不是[window addSubview:[navigation view]]@奥利弗:谢谢你的评论。答案非常陈旧,因此没有考虑
rootViewController
,代码片段来自外部源,但您肯定是对的,尤其是关于发行版
。我添加了几点,以使答案更切合时宜(且正确)。