iOS 在NSObject子类的执行代码中实现UIViewController的跳转

在iOS开发中, 要实现UIViewController之间的跳转,通过navigationController的pushViewController或者UIViewController自身的presentViewController的方式即可。但要求是从一个UIViewController跳到另外一个UIViewController中。如果要从NSObject子类的执行代码中做跳转至UIViewController的操作, 要如何实现呢?
首先, 说明下为何会有这样的需求, 即: UICollectionView -> NSObjectSubclass -> UIViewController:
设置UICollectionView的datasource和delegate为一个NSObject的子类, 用于处理所有跟UICollectionView的datasource和delegate相关的逻辑关系. 那么在该类的执行代码中可能有调转到另一个UIViewController的使用场景. 此时, 不能使用pushViewController, 因self根本就没有navigationController属性;也不能使用presentViewController, self不是UIViewController的子类。
解决方式可以考虑一下两种:

delegate的方式

delegate是iOS中非常常见的方法. 设置UICollectionView的xxxDelegate为该NSObjectSubclass, 实现其中的方法xxxDelegateMethod1, 然后在NSObjectSubclass的执行代码中调用xxxDelegate的xxxDelegateMethod1方法. 该方法的实现在UICollectionView(包含navigationController属性)中, 因此在其中可以实现UIViewController之间的正常跳转.

rootViewController

在NSObjectSubclass的执行代码中, 先获取当前的rootViewController, 在做UIViewController之间的跳转:

UIViewController *rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
[rootViewController presentViewController:filterCourseViewController animated:NO completion:nil];

最终, 要实现UIViewController之间的跳转, pushViewController或presentViewController的执行代码所处的类self必须要有navigationController属性, 或者必须是UIViewController的子类.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,301评论 1 14
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,194评论 4 61
  • 花,开了一季,静静飘落尘埃,姹紫于嫣然,却在蓦然回首时,敲成了一首首诗!山一程,水一程,一边拾起,却一边丢弃,洒满...
    铁杆同学阅读 1,105评论 0 2
  • 这一天对我来说喜忧参半。 忧的是总被一些奇怪的梦拖在床上,没错,早上十点起的床… 喜的是下午达到了百分之九十的专注...
    二十九画生阅读 942评论 0 0
  • YYWebImage的使用
    指尖的跳动阅读 1,072评论 0 0