如何从视图控制器调用所有方法和函数到应用程序委托?

Posted

技术标签:

【中文标题】如何从视图控制器调用所有方法和函数到应用程序委托?【英文标题】:how to call all methods and functions from view controller to app delegate? 【发布时间】:2016-11-11 09:43:16 【问题描述】:

嗨,我正在我的应用程序中使用 swift2 开发一个应用程序我想在用户成功登录后每 5 分钟跟踪一次位置现在我可以成功跟踪用户的位置现在我想跟踪应用程序何时处于后台我必须使用应用程序委托,但所有功能和方法都是我在视图控制器中编写的,所以我如何调用视图控制器方法和函数来应用程序委托。

viewController中的代码:

class ThirdViewController: UIViewController

In view did load:

 

  //////   i created timer scheduled with time internal  /////

 

 //////   Here am fetched current locations and performed some function for timer to execute   //////

 

在我的appDelegate中:

func applicationDidEnterBackground(application: UIApplication) 

 if UIApplication.sharedApplication().applicationState != .Active

 //here i have to call that timer function execute how to do that????


【问题讨论】:

【参考方案1】:

您可以在应用进入后台时触发通知

func applicationDidEnterBackground(application: UIApplication) 

 if UIApplication.sharedApplication().applicationState != .Active

  NSNotificationCenter.defaultCenter().postNotificationName("Notificationname", object: nil)


在您的控制器视图中确实加载了 dd 观察者以进行通知

// add observer for notification.
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.notificationReceived), name: "Notificationname", object: nil)

收到通知的方法处理程序

func notificationReceived() 
// do what you want to do here.

【讨论】:

我没有使用通知之类的东西......如何使用它??你在编码中提供的“通知名称”是什么。你能解释一下......对不起@sahil 从这里阅读andrewcbancroft.com/2014/10/08/… 你也可以用其他方式。但这种方法并不好。让 navigationController = window?.rootViewController 作为? UINavigationController if let activeController = navigationController!.visibleViewController if activeController.isKindOfClass( YourControllerClass ) // 调用 YourControllerClass 方法 在 oneview 控制器中,我已经实现了 mapview 的所有方法和功能。然后我使用 nstimer 每 3 分钟更新一次位置。现在,即使是后台应用程序,该位置也应该更新。我希望你知道工作和显示地图视图的方法和功能...所以它有很多功能和方法..我必须在执行 nstimer 时调用 appdelegate ????明白??? 是的!我得到了它。您可以像我一样在 Appdelegate 的任何地方简单地触发通知。在通知处理程序中只需调用该方法。【参考方案2】:

您可能希望创建一个包含您的函数的类,然后从您的应用委托中调用它,您可以这样做:

使用您的班级名称创建一个 swift 文件,例如MyClass.swift 然后在文件中创建类并在其中添加函数:

class MyClassName Add your function in here

然后你像这样从appDelegate.swift 调用它:

let myClassVar: MyClassName?

然后像这样调用函数 -> myClassVar.functionName

【讨论】:

我已经创建了 swift 文件并为互联网连接执行了一些其他功能...是否可以在同一个文件中添加编码 是的,如果您愿意,您可以在该文件中创建一个类,您可以在其下方查看控制器类。但是,这样做不是一个好习惯,但它会解决您遇到的问题。 有什么替代方法 是的,我在答案中显示的方法。使用此方法,您将能够将所有函数放入类中并从任何地方调用它。这将使您的代码更有效率。【参考方案3】:

这样,

func applicationDidEnterBackground(application: UIApplication) 

    if UIApplication.sharedApplication().applicationState != .Active
      let thirdViewController = ThirdViewController()
      thirdViewController.functionYouWantToCall()
 

谢谢:)

【讨论】:

我会试试这个 又是什么问题? 它没有调用那个函数 我想调用应用程序委托的所有方法和函数..因为它用于更新位置..所以我需要调用纬度和经度 您是否尝试过通知@antonyraja。这不起作用,因为 letthirdViewController = ThirdViewController() 它每次都在创建 ThirdViewController 的新实例。

以上是关于如何从视图控制器调用所有方法和函数到应用程序委托?的主要内容,如果未能解决你的问题,请参考以下文章

从多个视图控制器接收委托方法调用

从应用委托类调用视图控制器的方法

从 tableView 委托类中调用视图控制器 segue

如何附加滚动视图委托方法?

如何将布尔值从应用程序委托传输到视图控制器?

如何通过委托将信息从键盘视图控制器传递到主视图控制器