记录两个dismissViewController 的扩展方法

2021-01-05  本文已影响0人  Nulll

有时候在多次调用presentViewController: 方法的时候,可能有需求像 push一样,需要pop 到根控制器,或者pop到指定控制器。但是presentViewController:之后却只有 dismissViewControllerAnimated:这一个方法。于是乎想到了写一个类似于pop 的方法来实现dismiss 到指定控制器,或者dismiss到根控制器。

第一个。dismiss到根控制器

///1、dismiss 掉所有控制器。
- (void)dismissToRootViewControllerAnimated:(BOOL)animated completion:(void (^ __nullable)(void))completion {
    //[self.navigationController popToRootViewControllerAnimated:<#(BOOL)#>]
    
    UIViewController *vc = self;
    while (vc.presentingViewController) {
        vc = vc.presentingViewController;
    }
    [vc dismissViewControllerAnimated:animated completion:completion];
    
}

第二个。dismiss到指定控制器

///2、dismiss 到指定控制器。
- (void)dismissToViewController:(UIViewController *)viewController animated:(BOOL)animated completion:(void (^ __nullable)(void))completion {
    //[self.navigationController popToViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#>]
    
    UIViewController *flag = nil;
    UIViewController *vc = self;
    while (vc.presentingViewController) {
        vc = vc.presentingViewController;
        if ([vc isKindOfClass:[viewController class]]) {
            flag = vc;
            break;
        }
    }
    [flag dismissViewControllerAnimated:animated completion:completion];

}
上一篇 下一篇

猜你喜欢

热点阅读