【问题标题】:How to call a method of another ViewController from Appdelegate?如何从 Appdelegate 调用另一个 ViewController 的方法?
【发布时间】:2015-03-26 14:36:14
【问题描述】:

我需要从我的 appdelegate 执行一个来自视图控制器的方法。

请问,谁能告诉我如何轻松地从我的 appdelegate 调用我需要的任何方法?

关于这个论点有很多问题,但没有一个有用/完整/正确,所以请避免将 URL 发布到其他主题:我已经检查了所有问题,但我真的找不到任何关于这样做的准确答案迅速。 :)

【问题讨论】:

  • 您需要在应用委托中引用视图控制器。然后只调用方法? theViewController.....!
  • 您只需要获取一个指向您要调用其方法的控制器的指针。从概念上讲,这是一个简单的问题,但是如果不具体了解您要访问的控制器以及它如何适合您的控制器层次结构,就无法给您一个“精确”的答案。

标签: ios swift uiviewcontroller appdelegate


【解决方案1】:

这取决于您如何安排视图控制器,但这里有一个简单的 iPhone 主/细节项目的示例。

let root : UINavigationController = self.window!.rootViewController! as UINavigationController
let master : MasterViewController = root.topViewController as MasterViewController
println("\(master.description)")

【讨论】:

    【解决方案2】:

    我这样做的方法是搜索我想要的视图控制器,从 AppDelegate 的 var window: UIWindow? 开始,然后再深入,直到找到它。我最初尝试实现NSNotification,但不建议在 swift 上这样做(我认为计算属性是一个很好的替代品,但在这种情况下它不起作用)。

    这就是我在 ViewController 顶部使用 NavigationController 为基于选项卡的应用程序所做的:

    if let rootViewController = self.window?.rootViewController as? UITabBarController
        if let viewControllers = rootViewController.viewControllers {
            for navigationController in viewControllers {
                if let yourViewController = navigationController.topViewController as? YourCustomViewController {
                    if yourViewController.hasSomeFlag {
                        yourViewController.theMethod()
                    }
                    break
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以通过通知来做到这一点,只需将观察者添加到您的视图控制器,从您的应用代理发布通知,该观察者将捕获它并运行您指定的函数。

      本教程应该可以帮助您入门:https://www.codefellows.org/blog/how-to-implement-an-nsnotification-observer-in-swift

      【讨论】:

        【解决方案4】:

        试试这个

        @UIApplicationMain
        class AppDelegate: UIResponder, UIApplicationDelegate {
        
        var window: UIWindow?
        
        
        func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
            // Override point for customization after application launch.
        
            return true
        }
        
        func customMethod()
        {
        
        }
        }
        

        从 ViewController 调用自定义方法

        class ViewController: UIViewController {
        
        let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        
            appDelegate.customMethod()
        }
        

        【讨论】:

          猜你喜欢
          • 2014-11-18
          • 1970-01-01
          • 2012-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 2018-04-27
          • 2016-05-06
          相关资源
          最近更新 更多