首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从非视图类获取presentViewController (Objective-C)

从非视图类获取presentViewController (Objective-C)

在Objective-C中,presentViewController是一个用于在视图控制器之间进行页面跳转的方法。通常情况下,我们可以在视图控制器类中直接调用该方法来实现页面的展示和切换。但是,在某些情况下,我们可能需要在非视图类中获取到当前的视图控制器,并使用presentViewController方法进行页面跳转。

要在非视图类中获取到当前的视图控制器,可以通过以下步骤实现:

  1. 首先,需要引入UIKit框架,以便使用UIViewController类和相关方法。在非视图类的头文件中添加以下导入语句:
代码语言:txt
复制
#import <UIKit/UIKit.h>
  1. 接下来,可以使用UIApplication类的sharedApplication方法获取到当前应用程序的实例。然后,通过该实例的keyWindow属性获取到当前的主窗口。代码示例如下:
代码语言:txt
复制
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
  1. 通过主窗口的rootViewController属性可以获取到当前的根视图控制器。代码示例如下:
代码语言:txt
复制
UIViewController *rootViewController = keyWindow.rootViewController;
  1. 如果需要获取到当前正在显示的视图控制器,可以使用rootViewController的presentedViewController属性。代码示例如下:
代码语言:txt
复制
UIViewController *presentedViewController = rootViewController.presentedViewController;
  1. 最后,可以使用presentedViewController调用presentViewController方法进行页面跳转。代码示例如下:
代码语言:txt
复制
[presentedViewController presentViewController:yourViewController animated:YES completion:nil];

需要注意的是,以上步骤中的yourViewController是你要展示的目标视图控制器,可以根据实际情况进行替换。

这种方式可以在非视图类中获取到当前的视图控制器,并使用presentViewController方法进行页面跳转。适用场景包括但不限于:在工具类、网络请求类、数据处理类等非视图类中需要进行页面跳转的情况。

腾讯云相关产品推荐:

以上是关于从非视图类获取presentViewController的解答,希望能对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定名称生成规则 | 绑定字段生成规则 | 绑定获取视图 | 绑定获取布局组件 )

定制视图绑定 ( 启用视图绑定后 不想生成绑定 ) V . 视图绑定布局文件 VI . 绑定名称生成规则 VII . 绑定对应的布局中的组件字段生成规则 VIII . 视图绑定获取 IX ....设置视图绑定后的布局 X . 获取视图绑定组件 XI . 视图绑定对应 Java 示例代码 XII . 应用运行结果 XIII . GitHub 代码地址 I ....视图绑定获取 ---- activity_main.xml 布局生成的绑定为 ActivityMainBinding , 可调用 inflate 方法 , 获取该绑定对象 , 需要传递 LayoutInflater...设置视图绑定后的布局 ---- 1 . 获取视图 : ActivityMainBinding 绑定自带 getRoot() 方法 , 可以直接获取到 布局文件的 根视图 ; 2 ....获取视图绑定组件 ---- 可以直接通过 视图绑定 ActivityMainBinding 对象 binding 获取对应的组件 , 组件名称就是布局文件中定义的组件 id ; //binding

1.2K10

【IOS开发基础系列】UIAlertController专题

:     Objective-C版本: [self presentViewController: alertController animated: YES completion: nil];     ...以前我们只能在默认视图、文本框视图、密码框视图、登录和密码输入框视图中选择,现在我们可以向对话框中添加任意数目的UITextField对象,并且可以使用所有的UITextField特性。...Objective-C版本: [self presentViewController: alertController animated: YES completion: nil];     swift...UIPopoverArrowDirection.Any } iPad上的上拉菜单效果         UIPopoverPresentationController类同样也是在iOS 8中新出现的,...原先的UIAlertView和UIActionSheet仍然可以在iOS 8中工作得很好,所以没有必要急于更换代码(要知道本文用到的许多函数尽在iOS 8中支持)。

43430

重回iOS应用开发

Objective-C的偏多,所以就选择Objective-C吧。...这里每一个UI模块可以调用一个或者多个对应的业务模块,UI模块的组成: View + ViewModel的结构,然后ViewModel使用业务模块实现的protocol接口获取到数据,并根据界面层的实现需要进行转换...苹果的应用程序开发,学习曲线并不复杂,Objective-C语法,到UIkit和Foundation的API,再到Xcode实战开发,UI到业务,再到设计模式,所以整个过程比原来学习的时候还是能顺利的多...二、如何进行UI模块跳转与管理 1、直接跳转: #模态跳转:一个普通的视图控制器一般只有模态跳转的功能,这个方法是所有视图控制器对象都可以用的。...- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion

43020

张华平:结构化数据中获取洞察力

非常荣幸有这个机会跟大家来谈一谈结构化大数据分析,今天我们讲到了很多数据分析。其实更多的层面,我听到的除了袁博士讲到的之外,我想跟大家分享一个概念。现在的大数据,可以说有结构化和结构化的数据。...这种数据库,现实生活中绝大部分数据是没有办法处理的,现在我们结构化的数据规模是结构化数据的100倍以上,所以它的体量非常大。 我今天的题目主要跟大家讲社会化新媒体与结构化大数据分析。...我们可以看到,社会化媒体的发展历程,1.0的BBS,到后期的即时通讯,再到Web2.0的博客,视频和社区,以及到现在的微博、微信,按照一些特点我就不去分析。 ?...这样叠加在一起就产生一个1+1>2的效果,在这个过程中我们可以获取知识。实际上大数据的过程是信息叠加,产生知识的过程。 大数据给我们带来的是决策方式的变化。...我们最终的目标实际上就是我们希望大数据里获得大的洞察力,这就实现我们去了解谁,什么时间,我们在做什么样的事情。 三、大数据搜索与挖掘关键技术 ? 这里的关键技术,我给大家看一些例子。

1.3K60

3000行缩减到1000行,用django代替视图函数

, 写了三套独立的视图函数处理页面(很简单就完成了, 感觉很机智...)...由于时间紧, 需求变化频繁, 也没时间重构项目, 复制,粘贴到怀疑人生, 3.0版本是含着泪做完的...) ---- 项目完成后, 我迫不及待的进行了项目优化 用代替视图,3000行缩减到1000...行 用取代视图函数的逻辑非常简单, 两步就能搞定 第一步: 改写路由映射, 通过路由, 把 语言参数传进去 原urls: from django.conf.urls import url from ....小结: 开发经验这种东西, 踩的坑多了, 自然就有了 如果有人告诉你, django要用来减少视图函数的重复书写, 你可能会不以为然, 但亲身经历将3000重复代码简化到1000行不到的时候, 你自然也就接受了...django要用来减少视图函数的重复书写的观点...

65320

iOS学习——获取当前最顶层的ViewController

1 实现思路   通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是UIApplication的keyWindow的rootViewController...在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过 presentViewController...getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]]; } else { // 根视图导航...[UIApplication sharedApplication].keyWindow.rootViewController获取到的是项目的根视图,结合可能用到UITabBarController或者UINavigationController...ps:   如果是需要push新的视图,就非常简单了。用上面的方法获取到顶层的视图,判断currentVC.navigationController是否为nil。

6.4K50

跟iOS UI的捉迷藏,真的能够获取到self.presentingViewController

近期,在做一个有趣的实验,研究presentViewController和dismissViewController的对应关系,这里发现了一个有趣的现象,通常情况下,两者配对使用,如果连续两次presentViewController...modalPresentationStyle = UIModalPresentationFullScreen时,执行当前present事件的控制器必须是一个全屏控制器,如果当前执行的控制器不是一个全屏的控制器,它将在视图层级结构中找到一个全屏的父控制器去执行...这就会影响self.presentingViewController获取,有时业务要求还是需要获取代码上presentVC的控制器 那么能不能把这个变量确定呢 解决这个需求,我们需要用到一对属性 @property...如果把一个控制器的definesPresentationContext属性设置为YES,那么在需要进行UIModalPresentationCurrentContext类型的跳转的时候,UIKit会使用视图层级内的这个控制器来进行跳转...第二个控制器加载成功,但同时会有一个新的warning:Presenting view controllers on detached view controllers is discouraged 两个

62820

iOS9系列专题五——全新的联系人与联系人UI框架

iOS9全新的联系人相关框架——Contacts Framework 一、引言         在以前iOS开发中,涉及联系人相关的编程,代码都非常繁琐,并且框架的设计也不是Objective-C风格的...三、获取格式化的联系人信息 iOS9中,ContactFramework也为开发者提供了非常方便的格式化信息的方法,还拿我们上面创建的联系人对象举例: 1、获取格式化的联系人姓名     NSString...弹出联系人列表:     CNContactPickerViewController * con = [[CNContactPickerViewController alloc]init];     [self presentViewController...联系人逻辑的相关处理主要在CNContactPickerDelegate中完成: //视图取消时 调用的方法 - (void)contactPickerDidCancel:(CNContactPickerViewController...CNContactViewController * con = [CNContactViewController viewControllerForContact:contact];     [self presentViewController

89840

iOS--React Native 图片插件(打开、保存、剪切、压缩)

源码Demo获取方法 如果需要React Native图片插件(打开、保存、剪切、压缩)源码demo,欢迎关注 【网罗开发】微信公众号,回复【67】便可领取。...这些功能加通过在PhotosManage中对应封装的方法来提供给Javascript开发使用。...新建PhotosManage,实现RCTBridgeModule协议 新建继承NSObject的PhotosManage,并实现RCTBridgeModule协议 // PhotosManage.h...如果你不指定,默认就会使用这个 Objective-C 的名字。 如果类名以 RCT 开头,则 JavaScript 端引入的模块名会自动移除这个前缀。...Native跟控制器,view将不能正常显示出来,实现方法如下: // PhotosManage.m#import 引入之后,在视图初始化或者显示的时候

2.6K10

iOS进阶之runtime作用

Objective-C 三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject定义的方法,通过对 runtime...2、作用 1.动态交换两个方法的实现 2.为类别添加属性(我们知道类别是不能扩展属性的,只能扩展方法,但可以运行时实现,通过为增加属性) 3.获取某个的所有成员变量和成员方法 4.实现NSCoding...policy) id object :表示关联者,是一个对象,变量名理所当然也是object const void *key :获取被关联者的索引...,然后对父进行编码,如果父是NSObject就结束编码 - (void)encode:(NSCoder *)aCoder { // 一层层父往上查找,对父的属性执行归解档方法 Class...UIViewController *vc = [UIViewController new]; vc.view.backgroundColor = [UIColor redColor]; [self presentViewController

61990
领券