我有一个标签栏应用程序,有许多视图。有没有办法知道一个特定的UIViewController当前在UIViewController中是可见的?(寻找物业)
当前回答
对于那些正在寻找Swift 2.2版本的答案的人:
if self.isViewLoaded() && (self.view.window != nil) {
// viewController is visible
}
Swift 3:
if self.isViewLoaded && (self.view.window != nil) {
// viewController is visible
}
其他回答
我根据@ program的回答做了一个快速扩展。
它允许你很容易地检查UIViewController是否在屏幕上,就像这样:
if someViewController.isOnScreen {
// Do stuff here
}
扩展:
//
// UIViewControllerExtension.swift
//
import UIKit
extension UIViewController{
var isOnScreen: Bool{
return self.isViewLoaded() && view.window != nil
}
}
你可以通过window属性来检查
if(viewController.view.window){
// view visible
}else{
// no visible
}
XCode 6.4, iOS 8.4, ARC启用
显然有很多种方法。对我有效的方法如下:
@property(nonatomic, readonly, getter=isKeyWindow) BOOL keyWindow
这可以在任何视图控制器中以以下方式使用,
[self.view.window isKeyWindow]
如果你在-(void)viewDidLoad中调用这个属性,你得到0,然后如果你在-(void)viewDidAppear:(BOOL)animated后调用这个属性,你得到1。
希望这能帮助到一些人。谢谢!欢呼。
我用于模态呈现视图控制器的方法是检查所呈现控制器的类。如果呈现的视图控制器是ViewController2,那么我将执行一些代码。
UIViewController *vc = [self presentedViewController];
if ([vc isKindOfClass:[ViewController2 class]]) {
NSLog(@"this is VC2");
}
对于超全屏或超上下文模式表示,“is visible”可能意味着它在视图控制器堆栈的顶部,或者只是可见,但被另一个视图控制器覆盖。
要检查视图控制器“is the top view controller”和“is visible”是否有很大不同,你应该检查视图控制器的导航控制器的视图控制器堆栈。
我写了一段代码来解决这个问题:
extension UIViewController {
public var isVisible: Bool {
if isViewLoaded {
return view.window != nil
}
return false
}
public var isTopViewController: Bool {
if self.navigationController != nil {
return self.navigationController?.visibleViewController === self
} else if self.tabBarController != nil {
return self.tabBarController?.selectedViewController == self && self.presentedViewController == nil
} else {
return self.presentedViewController == nil && self.isVisible
}
}
}
推荐文章
- 错误ITMS-9000:“冗余二进制文件上传。火车1.0版本已经有一个二进制版本上传。
- Swift -转换为绝对值
- 从父iOS访问容器视图控制器
- 自定义dealloc和ARC (Objective-C)
- 调整UITableView的大小以适应内容
- 在代码中为UIButton设置一个图像
- NSRange从Swift Range?
- UICollectionView中的单元格间距
- 我如何在我的iOS应用程序中每n分钟得到一个后台位置更新?
- 如何使用iOS创建GUID/UUID
- 禁用所呈现视图控制器的交互式撤销
- 点击按钮时如何打开手机设置?
- 如何使用UIVisualEffectView来模糊图像?
- 如何修复UITableView分隔符在iOS 7?
- 故事板中的自定义单元格行高设置没有响应