【问题标题】:Swift: How should the App Delegate get a reference to the View Controller?Swift:App Delegate 应该如何获得对 View Controller 的引用?
【发布时间】:2015-04-24 02:22:59
【问题描述】:

我已经开始了一个新的 Swift 项目,我正在玩弄一些东西来看看连线如何与故事板一起工作,因为我以前从未使用过它们。

该项目是使用 Xcode 6.1 创建的默认故事板的单视图应用程序。它生成 AppDelegate.swift 和 ViewController.swift 类以及 Main.storyboard。

顺便说一句,我有点离开本教程:

http://www.raywenderlich.com/74904/swift-tutorial-part-2-simple-ios-app

我使用 Storyboard Interface Builder 添加的按钮和几个 textview 控件来处理事情。

我现在想做的是将应用委托的应用程序 didFinishLaunching 事件连接到视图控制器。

func application(application: UIApplication,
     didFinishLaunchingWithOptions launchOptions: 
     [NSObject: AnyObject]?) -> Bool {
}

我发现很多 StackOverflow 文章都在讨论这个问题,但是这些示例都围绕着实例化您自己的视图控制器。我只想获得对通过情节提要启动的视图控制器的引用。

最好的方法是什么?请随时向我指出相应的文档或其他帖子。

【问题讨论】:

  • AppDelgate 总是有对根视图控制器的引用,可以通过属性 AppDelegate.window.rootViewController 来引用
  • 仔细考虑在 ViewController 而不是 AppDelegate 中做你想做的事情。一个常见问题是在 AppDelegate 中投入过多。它的工作是对应用程序发生的启动事件和其他外部事件做出反应。如果您做的远不止这些,请重新考虑您的设计。也就是说,@Litephor 是正确的。

标签: ios xcode swift


【解决方案1】:

我终于在checking the current view controller上找到了这篇文章,里面有我要找的逻辑:

var myViewController : ViewController!
...
if let viewControllers = self.window?.rootViewController?.childViewControllers {
    for viewController in viewControllers {
        if viewController.isKindOfClass(ViewController) {
            myViewController = viewController as ViewController
            println("Found the view controller")
        }
    }
}

【讨论】:

    猜你喜欢
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多