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

本文介绍了解决iOS开发中附件浏览控制器从present方式显示返回的问题,通过判断控制器的显示方式来决定使用dismiss还是pop操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

-(void)CheckbtnAction:(NSNotification*)noti{
    
    FileMeta *meta = [noti.userInfo objectForKey:@"file"];
    if(meta.loadType==DoneLode){
        NSLog(@"打开%@",meta.materialname);
#pragma mark-- -BY HYR 2018-2-13 -查看PDF文件 准备跳转界面
        HYRPDFReaderViewController *pDFReadViewController = [[HYRPDFReaderViewController alloc] init];
        pDFReadViewController.view.backgroundColor = [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.presentingViewController) {
        [self dismissViewControllerAnimated:YES completion:nil];
    } else {
        [self.navigationController popViewControllerAnimated:YES];
    }

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

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

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


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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值