首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用UINavigationController

使用UINavigationController
EN

Stack Overflow用户
提问于 2012-04-30 12:09:07
回答 4查看 259关注 0票数 0

下面是我的代码:

代码语言:javascript
运行
复制
- (IBAction)play {
    if (!self.mapViewController)
    {
        self.mapViewController = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
    }
    [self.navigationController pushViewController:mapViewController animated:YES];
}

发生的情况是:当我第一次按下播放按钮时,新的视图没有显示出来。当我再次按下时,它崩溃了,因为相同的UIViewController被多次添加到堆栈中。有人知道怎么解决这个问题吗?

编辑:感谢您的回答。我检查了xib,我发现我弄乱了链接。修复:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-30 12:35:41

好的,试试下面的代码:如果当前的视图控制器不是导航控制器,试试下面的代码:

代码语言:javascript
运行
复制
- (IBAction)play {
   MapViewController *mapView = [[MapViewController alloc]initWithNibName:@"MapViewController"    bundle:nil];
   UINavigationController *navController = [[UINavigationController alloc]  initWithRootViewController:mapView];
   [self presentModalViewController:navController animated:YES];
}

(或者)如果currentviewcontroller是try导航控制器,请尝试以下代码:

代码语言:javascript
运行
复制
  - (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];
   }

谢谢..!

票数 0
EN

Stack Overflow用户

发布于 2012-04-30 12:21:28

在您的-init方法中创建视图控制器,然后只在-play中推送视图控制器。确保你的视图控制器被设计成用户可以“退出”它,从而从堆栈中弹出它,从而不会在多个打开时产生错误。

票数 0
EN

Stack Overflow用户

发布于 2012-04-30 12:21:46

UINavigationController会比你想象的做更多的记账工作。你只需要创建你的控制器并推送它。不需要维护自己的推荐人。

此外,如果将nib命名为MyView.xib,则不需要显式指定它的名称;它将在初始化时获取它。来自nibName property docs

如果视图控制器类名称以单词“controller”结尾,如在MyViewController中,它将查找名称与不带单词“Controller”的类名匹配的nib文件,如在MyView.nib中。

所以你的代码可以变成:

代码语言:javascript
运行
复制
- (IBAction)play {
    // Implicitly loads MapViewController.xib
    UIViewController* mapViewController = [[[MapViewController alloc] init] auotrelease];
   [self.navigationController pushViewController:mapViewController animated:YES];
}

只要Map使用popViewControllerUINavigationController就会处理释放,并确保堆栈上不会有多个副本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10378378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档