下面是我的代码:
- (IBAction)play {
if (!self.mapViewController)
{
self.mapViewController = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
}
[self.navigationController pushViewController:mapViewController animated:YES];
}
发生的情况是:当我第一次按下播放按钮时,新的视图没有显示出来。当我再次按下时,它崩溃了,因为相同的UIViewController被多次添加到堆栈中。有人知道怎么解决这个问题吗?
编辑:感谢您的回答。我检查了xib,我发现我弄乱了链接。修复:)
发布于 2012-04-30 12:35:41
好的,试试下面的代码:如果当前的视图控制器不是导航控制器,试试下面的代码:
- (IBAction)play {
MapViewController *mapView = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mapView];
[self presentModalViewController:navController animated:YES];
}
(或者)如果currentviewcontroller是try导航控制器,请尝试以下代码:
- (IBAction)play {
MapViewController *mapView = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];//Note:Check the mpviewcontroller xib file name as MapViewController is correct
[self.navigationController pushViewController:mapViewController animated:YES];
}
谢谢..!
发布于 2012-04-30 12:21:28
在您的-init方法中创建视图控制器,然后只在-play中推送视图控制器。确保你的视图控制器被设计成用户可以“退出”它,从而从堆栈中弹出它,从而不会在多个打开时产生错误。
发布于 2012-04-30 12:21:46
UINavigationController
会比你想象的做更多的记账工作。你只需要创建你的控制器并推送它。不需要维护自己的推荐人。
此外,如果将nib命名为MyView.xib
,则不需要显式指定它的名称;它将在初始化时获取它。来自nibName
property docs
如果视图控制器类名称以单词“controller”结尾,如在MyViewController中,它将查找名称与不带单词“Controller”的类名匹配的nib文件,如在MyView.nib中。
所以你的代码可以变成:
- (IBAction)play {
// Implicitly loads MapViewController.xib
UIViewController* mapViewController = [[[MapViewController alloc] init] auotrelease];
[self.navigationController pushViewController:mapViewController animated:YES];
}
只要Map使用popViewController
,UINavigationController
就会处理释放,并确保堆栈上不会有多个副本。
https://stackoverflow.com/questions/10378378
复制相似问题