如何在视图控制器中创建后退按钮以转到父视图控制器

How to create a back button in a view controller to go to parent view controller

嗨,我有一个带有容器的视图控制器,在容器中有一个带有集合视图的子视图,当用户点击集合视图单元格时,它会将我发送到详细视图控制器,但现在我想做的是添加我的详细视图控制器中的后退按钮将我发送到 parentViewController

案例 1:展开 Segue

这将根据您的情况完美运行:

iOS Unwind Segue

Unwind Segues 为您提供了一种“展开”导航堆栈并指定要返回的目的地的方法。

案例 2:PopToRootViewController

如果您的父视图也是您的根视图控制器,那么您可以使用 popToRootViewControllerAnimated:YES 轻松返回。

创建自己的后退按钮,使用方法backButtonTouch将其添加到导航栏。

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", nil) style:UIBarButtonItemStyleDone target:self action:@selector(backButtonTouch:)]; 

将以上代码添加到viewDidLoad.

-(void)backButtonTouch:(id)sender{
    [self.navigationController popToRootViewControllerAnimated:YES];
}
  1. 如果要自定义返回按钮,先隐藏导航栏

    [self.navigationController setNavigationBarHidden:YES];

  2. 现在添加一个按钮,并创建它的 touchUpInside 事件,在该事件中弹出控制器

    [self.navigationController popViewControllerAnimated:YES];

在后退按钮操作上,添加此行:

[self.navigationController popToRootViewControllerAnimated:YES];

这会将您转到 rootViewController

这是我返回父视图控制器的代码

 - (IBAction)ActionbtnBack:(id)sender {
        int flag = 0;
        for (UIViewController *controller in [[self.navigationController.viewControllers reverseObjectEnumerator] allObjects]) {
            NSLog(@"> %@",[controller class]);
            if ([controller isKindOfClass:[YourParentviewcontroller class]]) {
                flag=1;
                [self.navigationController popToViewController:controller
                                                      animated:YES];
                break;
            }
            else if ([controller isKindOfClass:[YourParentviewcontroller class]]) {
                flag=1;
                [self.navigationController popToViewController:controller
                                                      animated:YES];
                break;
            }
        }
        if (flag == 0) {
            YourParentviewcontroller *MoreVc = [[YourParentviewcontroller alloc] initWithNibName:@"parentViewcontrollerIdentifier" bundle:nil];
            [self.navigationController pushViewController:MoreVc animated:YES];
        }
    }