从我的appdelegate我需要执行一个来自viewcontroller的方法。
拜托,有人能告诉我如何轻松地从我的appdelegate调用我需要的任何方法吗?
关于这个论点的很多问题但是没有一个是有用的/完整的/正确的,所以请避免将URL发布到其他主题:我已经检查了所有问题,但我真的找不到关于这样做的任何确切答案迅速。 :)
答案 0 :(得分:7)
这取决于您如何安排视图控制器,但这是一个简单的iPhone主/详细项目的示例。
let root : UINavigationController = self.window!.rootViewController! as UINavigationController
let master : MasterViewController = root.topViewController as MasterViewController
println("\(master.description)")
答案 1 :(得分:0)
我这样做的方法是搜索我想要的视图控制器,从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
}
}
}
}
答案 2 :(得分:-1)
您可以通过通知执行此操作,只需将观察者添加到您的viewcontroller,发布来自您的app委托的通知,此观察者将捕获它并运行您指定的函数。
本教程可帮助您入门:https://www.codefellows.org/blog/how-to-implement-an-nsnotification-observer-in-swift
答案 3 :(得分:-2)
试试这个
@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()
}