繁体   English   中英

UINavigationController中后退按钮按下的自定义逻辑

[英]Custom logic for back button press in UINavigationController

我的应用布局的更详细说明:单击表视图的任何行将使用户进入下一个屏幕,后退按钮指向首页,而分段控件位于顶部。 代码中的逻辑确定将预先选择分段控件的哪些段。 用户可以单击分段控件的任何索引来更改屏幕上显示的内容。

我实现上述布局的方法是通过导航控制器。 与分段控件的“第一,第二和第三”相对应的每个页面的内容都是单独的视图控制器,之所以这样,是因为这些页面中的每个页面都具有重要的功能和控件,以便用户与之交互。将它们分别作为单独的视图控制器,有助于软件代码的组织和数据完整性,主屏幕位于导航控制器堆栈的索引零,与之对应的视图控制器首先位于导航控制器的索引一,依此类推。用户当前在第二个屏幕上并在分段控件中选择了“第一个”,如果用户现在单击“第三个”,则会将两个视图控制器推到堆栈上,反之亦然,以将控制器从导航堆栈中弹出。

两个问题:•对我的实施方式有何评论? 是否有任何更好的实施建议? 我确实考虑过的一种具体实现是,是否可能使一个视图控制器具有三个单独的视图(分别用于第一,第二和第三视图)? 对这种方法有何评论?

•   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];
   }

}

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

由于三个视图控制器在视图层次结构中实际上彼此相等,因此建议您在分割之间切换时,替换顶视图控制器,而不要推送多个视图控制器,以便可以从三个视图中的任何一个“返回”控制器,您将最终到达想要的位置。

这样的事情应该为您工作:

- (void)replaceTopViewControllerWith:(UIViewController *)vc {
    NSMutableArray *vcs = [[self.navigationController viewControllers] mutableCopy];
    [vcs removeLastObject];
    [vcs addObject:vc];
    [self.navigationController setViewControllers:vcs animated:YES];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM