1

对我的应用程序布局的更详细说明:单击表格视图的任何行都会将用户带到下一个屏幕,返回按钮指向主页,顶部有一个分段控件。代码中的逻辑确定将预选分段控件的哪些段。用户可以单击分段控件的任何索引来更改屏幕上显示的内容。

我实现上述布局的方式是通过导航控制器。分段控件的“第一、二、三”对应的每个页面的内容都是独立的视图控制器。我之所以有这样的原因是因为这些页面中的每一个都有重要的功能和控件供用户交互. 将它们各自作为一个单独的视图控制器有助于软件代码组织和数据完整性. 主屏幕位于导航控制器堆栈的索引零处, 视图控制器对应于导航控制器的第一个索引, 等等. 假设用户当前在第二个屏幕上,在分段控件中选择了“第一个”。如果用户现在点击“第三个”,

两个问题: • 对我的实施方式有何评论?有没有更好的实施建议?我确实考虑过的一个具体实现是让一个视图控制器具有三个单独的视图(第一个、第二个和第三个各一个)的可能性?对此方法有何评论?

•   I seem to have an extremely hard time controlling the behavior of the “back button”of the navigation controller. When the user has selected “second”in the segmented control, I would still like to have the back button saying “Home” instead of “first” which is the default behavior of the navigation controller. I have figured out how I can customize the text of the back button. However, I can't seem to figure out how to customize the behavior of the button. What I mean by that is, when the user is on "third”, and clicks on the “home button”I'd like to pop three view controllers and land the user on the home screen.

在 SO 上,我看到并尝试了各种技术,但均未成功:方法 1:viewwillDisappear():确定此函数是否作为后退按钮按下的一部分被调用,并实现在标准单视图控制器弹出之外弹出其他视图控制器的逻辑. 有那么一会儿,这个逻辑确实确实弹出回到主页但是它立即崩溃并显示以下我似乎不明白的消息:

方法2:didPopItem():我把下面的代码放在这个函数里

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item {

   NSLog(@"%s",__FUNCTION__);
      [[self navigationController] popViewControllerAnimated:YES];
    //ViewControllerAnimated:YES];
   NSLog(@"navcount%d",self.navigationController.viewControllers.count);
   if (self.navigationController.viewControllers.count > 1) {
         [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
   }

}

对上述任何评论将不胜感激!在此先感谢您的帮助。

4

1 回答 1

1

由于三个视图控制器在您的视图层次结构中实际上彼此相等,因此我建议在您在段之间切换时替换顶部视图控制器而不是推送多个视图控制器,以便您可以从三个视图中的任何一个“返回”控制器,你最终会到达你想去的地方。

像这样的东西应该适合你:

- (void)replaceTopViewControllerWith:(UIViewController *)vc {
    NSMutableArray *vcs = [[self.navigationController viewControllers] mutableCopy];
    [vcs removeLastObject];
    [vcs addObject:vc];
    [self.navigationController setViewControllers:vcs animated:YES];
}
于 2012-04-21T04:52:10.853 回答