如何在非视图控制器类中获取可见/当前视图控制器?迅速

Posted

技术标签:

【中文标题】如何在非视图控制器类中获取可见/当前视图控制器?迅速【英文标题】:How get visible / current viewcontroller in non-viewcontroller class? Swift 【发布时间】:2016-02-25 08:29:43 【问题描述】:

我有信息框对象 - “信息视图”。我想将此视图附加到当前的 VC 视图中,有时直接在 VC 类中,有时在 VC 类之外,例如。在我的框架中。

我不想总是在方法参数中传递当前的 VC,比如

class InfoView: UIView 

    /* Initialization methods */

    func show(viewController: ViewController) 

       /* some code */

        viewController.addSubview(self)
    

我想直接在我的“信息视图”类中获取当前 VC:

class InfoView: UIView 

    /* Initialization methods */

    func show() 
        let viewController = /* need get current VC */

        /* some code */

        viewController.addSubview(self)
    

UIApplication.sharedApplication() 中的rootViewController 属性返回当前 VC,但在转换后此 VC 未更改。

我如何才能获得当前的 VC?

【问题讨论】:

【参考方案1】:

rootViewController 是一个不错的选择。你的根 VC 可能是一个导航控制器,所以你可以使用这样的东西:

func currentVC() -> UIViewController? 
    guard let navigationController = UIApplication.sharedApplication().keyWindow?.rootViewController as? UINavigationController else  return nil 
    return navigationController.viewControllers.last

【讨论】:

【参考方案2】:

嗨,Artem 和 DeyaEldeen, 如果我没记错的话,你想访问情节提要上的视图控制器。

您可以获取任何视图控制器的实例 步骤 1 在其自定义类属性中为视图控制器设置故事板 ID。 2 在您的信息视图类中

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MyViewcontroller *c = [storyboard instantiateViewControllerWithIdentifier:@"MyViewcontrollerStoryboardID"]

希望对你有帮助

【讨论】:

以上是关于如何在非视图控制器类中获取可见/当前视图控制器?迅速的主要内容,如果未能解决你的问题,请参考以下文章

如何在非控制器类中从 Microsoft.AspNetCore.Identity 获取 UserID

获取对当前可见视图控制器的引用

IGListKit:获取当前可见的单元格索引

如何从自定义表格视图单元类中获取对表格视图控制器的引用

如何在不将控制器添加到视图层次结构并使其可见的情况下从 UIViewController 获取 UIView?

在当前可见之前关闭先前呈现的模态视图控制器