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的子类.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-17 04:11:53

iOS --- 在NSObject子类的执行代码中实现UIViewController的跳转的相关文章

IOS手动添加的View 在代码中使用(自动布局)autoLayout

- (void)viewDidLoad { [super viewDidLoad]; UIButton *btnTest = [UIButton buttonWithType:UIButtonTypeCustom];//不需要去刻意指定x,y的坐标,可以用CGRectZero btnTest.backgroundColor = [UIColor redColor]; btnTest.layer.borderColor = [UIColor yellowColor].CGColor; btnTes

在jQuery代码中,实现转跳

隐藏转跳,浏览器不产生历史记录(replace).代码片段: window.location.replace("http://insus.cnblogs.com"); 当然我们还不能忘记常用的a标签(href).代码片段: window.location.href = "http://insus.cnblogs.com";

在view中实现UIViewController的跳转

view中是不能进行UIViewController的push,pop等操作的,若进行跳转操作,一般是用代理,block,通知等实现,那如何实现在ViewController的subView中实现跳转操作呢,其实只要获取该view所在的ViewController即可. 获取view所在UIViewController UIView+UIViewController.h #import <UIKit/UIKit.h> @interface UIView (UIViewController) -

设计模式中聚合和组合--代码中的实现

●引言: 最近一直在看设计模式,以前写过一篇文章:设计模式中的关系在代码中的实现 之后他们问我说:聚合和组合在代码上怎样表现出生命期的不同.因为当时是真心不懂,不敢回答,现在有一点点心得,和大家分享一下. ●定义: 聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体.如电脑和鼠标. ?大话上的聚合: ?大话上的组合: 表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在.组合关系的"部分",是不能在整体之间进行共享的. ●异同点

js基础梳理-究竟什么是执行上下文栈(执行栈),执行上下文(可执行代码)?

日常在群里讨论一些概念性的问题,比如变量提升,作用域和闭包相关问题的时候,经常会听一些大佬们给别人解释的时候说执行上下文,调用上下文巴拉巴拉,总有点似懂非懂,不明觉厉的感觉.今天,就对这两个概念梳理一下,加深对js基础核心的理解. 1. 执行上下文(execution context)与可执行代码(execution code) 1.1 首先说一下,可执行代码的类型有哪些: 全局代码:例如加载外部的js文件或者本地标签内的代码.全局代码不包括 function 体内的代码 函数代码:functi

工作流程中分支节点的跳转

如下图所示:这个合同会签单在流转时,每一个审批节点均有三种意见结论:同意.不同意.中止:当选择不同意时,审批人填写好相应意见后,流程自动流转到"资装办修改"节点,该节点执行人修改合同相应内容:然后再返回到上一步节点那里继续流转. 要实现这个功能,我们可以在每个审批节点的节点执行代码中中写入下图中所示代码: 上图中表示,当审批节点执行人选择"不同意"时,流程下一步将自动流转到"资装办修改"节点: 我们可以看到,当流程流转到"资装办修改&q

iOS 自动布局扩展应用:代码中动态调整布局常量

一.设计需求 iOS Storyboard 自动布局技术,是iOS 6才出来的新技术,相当于多屏幕分辩率下自适应的技术. 但是一些复杂情况还是难处理. 比如有一个界面需求,进度条上显示标签,这个需求不难,难的是显要在显示表格框内,在各种机型显示正常. 最初设定是垂直居中向上偏15个像素 这是iPhone 4S 显示效果,下面与滑块还有错位 但是在iPhone 6下显示,下面有错位,但是上面留空太多 但如果把偏移量设为21.则出现另一种情况. 大屏幕的手机显示完美. 但是iPhone 4S下就错位

如何在代码中执行apk安装

import java.io.File; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { /** Called when th

在线程中执行代码

说明:支持跨线程访问控件. 定义代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace PackageOperMgr.util { /// <summary> /// 跨线程访问控件的委托 /// </summary> public de