当前控制器ViewController如果是present出来的,那就不能push下一个界面。

时间:2025-01-29 13:11:52

前些天写的附件浏览文件的模块被其他同事对接,今天测试说点击他的那个界面的按钮查看不了文件。把bug丢给我了。。。大过年的哥哥还在撸~~~

刚刚一看,原来他的控制器是present出来的,在cell被点击或者cell上的按钮被点击的时候想push出我的附件浏览控制器。。。当然怎么点都没有用啦。。。

现在我用一个导航控制器包着我新建的附件浏览控制器,然后再present过去,瞬间柳暗花明又一村。。

-(void)CheckbtnAction:(NSNotification*)noti{
    
    FileMeta *meta = [ objectForKey:@"file"];
    if(==DoneLode){
        NSLog(@"打开%@",);
#pragma mark-- -BY HYR 2018-2-13 -查看PDF文件 准备跳转界面
        HYRPDFReaderViewController *pDFReadViewController = [[HYRPDFReaderViewController alloc] init];
         = [UIColor lightGrayColor];
        NavigationController *navi = [[NavigationController alloc] initWithRootViewController:pDFReadViewController];
        //  显示pdf文档
        [pDFReadViewController showPDFWithFileMeta:meta andPage:0];
        [self presentViewController:navi animated:YES completion:nil];
    }
}

但是问题来了,我附件浏览的控制器在别的地方都是push过来的,所以返回按钮的事件都是pop回去。唯独这个小兔崽子的界面是present出来的*我的也要present。。。那如何返回呢?且看下面两点

1、可以判断当前self有没有present方式显示的父视图presentingViewController

if () {
        [self dismissViewControllerAnimated:YES completion:nil];
    } else {
        [ popViewControllerAnimated:YES];
    }

2、可以通过判断的最后一个是否是当前控制器,

或者 == self,如果是的话,那就证明我当前self这个控制器是被push过来的

if ( == self) {
        [ popViewControllerAnimated:YES];
    } else {
        [self dismissViewControllerAnimated:YES completion:nil];
    }


只要在返回按钮的方法里写上以上两种方式的一种,就可以大功告成啦!