导航通过类名返回指定页面
发布日期:2022-04-05 00:52:15 浏览次数:2 分类:博客文章

本文共 1860 字,大约阅读时间需要 6 分钟。

项目中我们经常会用到导航,常见的问题就是返回到指定的页面,但是系统的方法是需要传入一个对象,如何通过类名来返回指定页面呢?

- (nullable NSArray<__kindof UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; // Pops view controllers until the one specified is on top. Returns the popped controllers.

原理:利用UINavigationController的viewControllers属性,循环查找,再跳转指定对象

@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers; // The current view controller stack.

有下面三种情况需要考虑

A、栈里是不同的类创建的对象

B、在栈里有同一个类创建的两个对象,返回到先创建的对象

C、在栈里有同一个类创建的两个对象,返回到后创建的对象

话不多说直接上代码

- (void)popToViewControllerClass:(Class) targetClass{        if ([targetClass respondsToSelector:@selector(alloc)]){                UINavigationController* navC = (UINavigationController*)([self isKindOfClass:UINavigationController.class] ? self : self.navigationController);        //        A&B//        for (UIViewController *vc in navC.viewControllers){//            if ([vc isKindOfClass:targetClass]){//                [navC popToViewController:vc animated:YES];//                return;//            }//        }        //       C//       1、 倒叙数组+forin循环        //        NSArray<__kindof UIViewController *> *reversStackArray = [[navC.viewControllers reverseObjectEnumerator] allObjects];        //        for (UIViewController *vc in reversStackArray){        //            if ([vc isKindOfClass:targetClass]){        //                [navC popToViewController:vc animated:YES];        //                return;        //            }        //        }        //      2、  枚举器+while循环        NSEnumerator *enumerator = [navC.viewControllers reverseObjectEnumerator];        id obj = nil;        while (obj = [enumerator nextObject]) {            if ([obj isKindOfClass:targetClass]){                [navC popToViewController:obj animated:YES];                return;            }        }    }}

 

转载地址:https://www.cnblogs.com/lijianyi/p/13186697.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:RN TextInput使用小记
下一篇:iOS UITableView组头组尾小结

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月13日 02时43分59秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql redis缓存层_redis实现缓存的两种方式 2019-04-21
git 改local branch名字_用Git管理Latex写论文的工作流程 2019-04-21
mysql索引篇_MySQL索引篇 2019-04-21
有至少一个用MySQL_Mysql有用的面试题 2019-04-21
mysql select同时update_MySQLSELECT同时UPDATE同一张表 2019-04-21
mysql删除后数据库没变化_mysql之delete删除记录后数据库大小不变 2019-04-21
net mysql start3534_MySQL 5.7.14 net start mysql 服务无法启动-“NET HELPMSG 3534” 的奇怪问题... 2019-04-21
pta两个有序链表的合并_7-1 两个有序链表序列的合并 (20分) --- 内存问题再叙 2019-04-21
python问题描述怎么写_python写文件有时候写不进去怎么办 2019-04-21
qpython3安装lxml_在python的lxml中使用xml目录? 2019-04-21
java 幂取模_快速幂取模算法 2019-04-21
java build path jre_java-如何在安装了jre 7后为Jre 6设置路径? 2019-04-21
java上传下载源码_javaweb简单实现文件上传与下载源代码 2019-04-21
java socket udp 广播_1.Java 的屏幕广播(基于UDP),2.多线程下载器 2019-04-21
java控制热敏打印机的例子.rar_stm32控制热敏打印机 2019-04-21
java clone equals_(原)java中对象复制、==、equals 2019-04-21
java滚动字幕实训报告_Java实习报告 (7000字).doc 2019-04-21
php7 memcached.exe,PHP7 下安装 memcache 和 memcached 扩展 2019-04-21
计算机二级java技巧,计算机二级报java难考吗 2019-04-21
php foreach 数据库,php – 使用foreach将数据库检索的数据排列在HTML表中 2019-04-21