iOS控制来自导航控制器的后退按钮

iOS控制来自导航控制器的后退按钮,ios,uinavigationcontroller,storyboard,segue,Ios,Uinavigationcontroller,Storyboard,Segue,我有三种看法: 1) 标签栏上的首字母 2) 从#1开始的视图 3) 从#2开始的视图 该应用程序的正常使用是从#1开始,进入#2,然后是#3,这将始终返回到#2。我希望#2的“后退”按钮始终返回到#1。但是,在输入#3并返回到#2后,返回按钮将转到#3(而我想要#1)。我目前使用推式分段。有关如何更新此内容的任何想法?请使用: popToRootViewControllerAnimated: 而不是: popViewControllerAnimated: 最后,我使用此链接解决了问题,并使

我有三种看法: 1) 标签栏上的首字母 2) 从#1开始的视图 3) 从#2开始的视图

该应用程序的正常使用是从#1开始,进入#2,然后是#3,这将始终返回到#2。我希望#2的“后退”按钮始终返回到#1。但是,在输入#3并返回到#2后,返回按钮将转到#3(而我想要#1)。我目前使用推式分段。有关如何更新此内容的任何想法?

请使用:

popToRootViewControllerAnimated:
而不是:

popViewControllerAnimated:

最后,我使用此链接解决了问题,并使用if语句将其包围起来,以检测至少2个视图控制器:

 - (void) viewWillDisappear:(BOOL)animated{
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
int i = [navigationArray count];

// [navigationArray removeAllObjects];    // This is just for remove all view controller from navigation stack.
if (i > 1){
    NSLog(@"count: %d", i);
    [navigationArray removeObjectAtIndex: 1];  // You can pass your index here
    self.navigationController.viewControllers = navigationArray;
}
}

你是怎么回到2的?你应该从堆栈中弹出3个。听起来你正在把一个新的2推到stack@Paul.s从3开始返回到2。是的,你是对的,我正在把一个新的2推到堆栈上。如何将3从堆栈中弹出?如果是我,我可能会向2回拨3,说“我完成了”,此时2将决定如何取消3,因为它知道3是如何显示的(navigationController/Modal/other)。在这种情况下,2只需调用
[self.navigationController PopViewControllerInitiated:YES]
@Paul.s PopViewControllerInitiated:YES只需从2返回到1。当我把它放在3中时,如果你把它放在3中,程序crashesIt不应该崩溃(如果你从3到2,它应该在这里)。确保您的项目中没有任何“向后”分段(从3到2或2到1)。当它崩溃时,您是否收到错误消息?如果是,请张贴。