文档章节

获取当前最顶层的ViewController

壹峰
 壹峰
发布于 2017/07/13 11:40
字数 267
阅读 8
收藏 0
点赞 0
评论 0

前言

在iOS中开放中,我们可能会遇到需要通过代码获取当前显示在屏幕最顶层的ViewController,比如我们需要在最顶层的ViewController上展示一个UIAlertController的时候。本文将介绍如何获取最顶层的ViewController

实现思路

通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是从UIApplication的keyWindow的rootViewController开始寻找(如果有多个UIWindow则要考虑UIWindow的选择问题。

在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过presentViewController:animated:completion:模态展示了其他ViewController。

实现方法

直接上代码

- (UIViewController *)topViewController {
    UIViewController *resultVC;
    resultVC = [self _topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
    while (resultVC.presentedViewController) {
        resultVC = [self _topViewController:resultVC.presentedViewController];
    }
    return resultVC;
}

- (UIViewController *)_topViewController:(UIViewController *)vc {
    if ([vc isKindOfClass:[UINavigationController class]]) {
        return [self _topViewController:[(UINavigationController *)vc topViewController]];
    } else if ([vc isKindOfClass:[UITabBarController class]]) {
        return [self _topViewController:[(UITabBarController *)vc selectedViewController]];
    } else {
        return vc;
    }
    return nil;
}

使用方法

UIViewController *topmostVC = [self topViewController];

本文个人博客地址: http://wty.im/2016/09/26/get-topmost-view-controller/
Github: https://github.com/wty21cn/

本文转载自:

共有 人打赏支持
壹峰
粉丝 7
博文 513
码字总数 7238
作品 0
广州
其他
获取当前最顶层的ViewController

前言 在iOS中开放中,我们可能会遇到需要通过代码获取当前显示在屏幕最顶层的ViewController,比如我们需要在最顶层的ViewController上展示一个UIAlertController的时候。本文将介绍如何获取...

秦无炎 ⋅ 2016/10/14 ⋅ 0

iOS学习之Map,定位,标记位置的使用

iOS上使用地图比Android要方便,只需要新建一个MKMapView,addSubView即可。这次要实现的效果如下: 有标注(大头针),定位,地图。 1、添加地图 1.1 新一个Single View app ,选择默认项,创...

totogo2010 ⋅ 2012/06/29 ⋅ 0

iOS 面试题之加载单张图片到底会不会崩溃?

今天,一哥们去某公司面试iOS职位。其中一道题目问,加载一张图片,到底会不会崩溃呢? 我拿到这个问题,当时以为是获取网络图片,那还是可能崩溃的,但实际问题,还有半句,图片是本地的。。...

萨斯辈的呼唤 ⋅ 2014/08/15 ⋅ 1

学习IOS编程必须要知道的一些知识

1.首先要先了解main( )函数,函数有四个参数,argc ,argv,程序主要类 ,代理类 2.plist 、xml 格式文件通常用于储存用户设置 3. pch 预编译文件头 4. xib nterface Builder 图形设计界面(...

青云_K ⋅ 2013/01/18 ⋅ 1

IOS开发之AVAudioPlayer的基本使用

1.这是播放效果,可以按下play和pause播放和暂停,进度条自动改变进度 ,我用的是mac mini产生很多错误,没有声音,换个耳机就可以了!! 滑动条拖动的时候,音乐播放改变会有噪音,解决方法如...

鹿微微鹿 ⋅ 2016/05/06 ⋅ 0

[非凡程序员]手写UIDatePicker和UIPickerView

// // ViewController.h // 手写UIDatePicker // // Created by 非凡 程序员 on 15/11/13. // Copyright (c) 2015年 非凡 程序员. All rights reserved. // #import <UIKit/UIKit.h> @interf......

温暖c ⋅ 2015/11/13 ⋅ 0

手写UIDatePicker和UIPickerView

// // ViewController.h // 手写UIDatePicker // // Created by 非凡 程序员 on 15/11/13. // Copyright (c) 2015年 非凡 程序员. All rights reserved. // #import <UIKit/UIKit.h> @interf......

温暖c ⋅ 2015/11/13 ⋅ 0

Map,定位,标记位置的使用

IOS上使用地图比Android要方便,只需要新建一个MKMapView,addSubView即可。这次要实现的效果如下: 有标注(大头针),定位,地图。 1、添加地图 1.1 新一个Single View app ,选择默认项,创...

jackyyang ⋅ 2012/07/15 ⋅ 2

IOS开发之AVPlayer

// // ViewController.m // 03-AVPlayer // // Created by 鹿微微鹿 on 16/5/6. // Copyright (c) 2016年 鹿微微鹿. All rights reserved. // //AVPlayer #import "ViewController.h" #impo......

鹿微微鹿 ⋅ 2016/05/07 ⋅ 0

qq好友列表问题

qq好友列表问题: Answer:button控件比较特殊,在指定标题时必须指定其状态,否则无法显示。因此要用setTitle方法,不能用点语法赋值标题,但给标题文字颜色赋值时可以用.titleLabel.text.fo...

马尔代夫的沙滩 ⋅ 2016/04/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部