Swift - 在应用程序委托(delegate)中访问不同的 View Controller

标签 swift viewcontroller appdelegate

app delegate 中,一个简单的应用程序只有 2 个屏幕:

  • 第一个屏幕是嵌入在导航 Controller 中的表格 View Controller
  • 第二个屏幕是一个 View Controller ,用于通过协议(protocol)/委托(delegate)/segue 将项目添加到第一个屏幕表

这是 app delegatedidFinishLaunchingWithOptions 的代码,我可以将第一个屏幕引用为 viewController[0]:

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

        let navController = self.window?.rootViewController as! UINavigationController
        let courseListController = navController.viewControllers[0] as! CourseListController
        courseListController.managedObjectContext = self.managedObjectContext

        return true
    }

如何引用中央屏幕上方、下方和旁边的屏幕?请给我建议一个解决方案。谢谢!

最佳答案

重要的是要记住, Storyboard中所有“外围” View Controller 的 View Controller 对象在执行访问它们的segue之前实际上并不存在,因此无法访问它们直接来自应用程序委托(delegate)。相反,您需要在创建每个 subview Controller 时将状态推送到每个 subview Controller ,无论源 View Controller 是什么。 Segues 是执行此操作的适当方法。

您可能希望在 Interface Builder 中为中央 View Controller 中的每个 Segue 分配一个唯一的 Segue 标识符。单击segue,然后在此处输入:

enter image description here

在中央 View Controller 中,实现 prepareForSegue(_:sender:),执行如下操作:

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject) {
    switch segue.identifier {

    case "SegueIdentifier1":

        guard let destination = segue.destinationViewController as? ViewController1 else { 
            return 
        }

        // set up your view controller here

    case "SegueIdentifier2":

        guard let destination = segue.destinationViewController as? ViewController2 else {
            return
        }

        // set up your view controller here

    // add additional segues as required

    default:
        break // unknown segue

    }
}

关于Swift - 在应用程序委托(delegate)中访问不同的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37364881/

相关文章:

ios - 最小和最大缩放 Xcode Swift

ios - 在同一 UILabel 上的两个不同文本之间重复淡入/淡出

ios - MMDrawerController 和实例化许多 View Controller

swift - 无法从 didReceiveLocalNotification 重新加载 UITable

ios - Alamofire 中的调用约定,Alamofire.request

ios - 仅在通过 TabBarController 转换 View 时出现约束警告

ios - Swift 3 - 关闭当前的 ViewController 并打开新的 ViewController

UIViewController View 中的 iOS 嵌套 View Controller View ?

ios - 从 SDK 更改 appdelegate 方法

ios - 使用 swift 从应用程序委托(delegate)打开 View Controller