仅当特定 ViewController 在前台时 iOS Swift 调用函数

Posted

技术标签:

【中文标题】仅当特定 ViewController 在前台时 iOS Swift 调用函数【英文标题】:iOS Swift Call Function Only When Particular ViewController Is In Foreground 【发布时间】:2018-07-05 06:04:57 【问题描述】:

在我的应用程序中,我有两个视图控制器 viewcontroller1viewcontroller2。在view controller1 中,我有一个名为UpdateView() 的函数,我需要为每个60 seconds 调用此函数,并且我使用DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 60) 完成了它。我的问题是我只想在viewcontroller1 处于前台时运行这个函数,当用户移动到viewcontroller2 时我不想再运行这个函数了。如何解决?

【问题讨论】:

【参考方案1】:

您可以使用Timer 轻松完成此操作。在viewWillAppear 方法内部启动计时器,在viewWillDisappear 内部停止或暂停计时器。

var myTimer:Timer!
var myTimeInterval:TimeInterval = 60

override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        myTimer = Timer.init(fire: Date(), interval: myTimeInterval, repeats: true, block:  (aTimer) in
            //call the functio you want
            UpdateView()
        )
    

    override func viewWillDisappear(_ animated: Bool) 
        super.viewWillDisappear(animated)
        myTimer.invalidate()
    

【讨论】:

【参考方案2】:

您应该在 viewDidDisappear 中停止计时器并在 ViewController1 中的 viewDidAppear 中启动计时器逻辑。

【讨论】:

以上是关于仅当特定 ViewController 在前台时 iOS Swift 调用函数的主要内容,如果未能解决你的问题,请参考以下文章

仅当应用程序处于前台而不是通知中时,如何捕获辅助功能事件?

仅当应用程序在前台时才会收到 Android 通知

仅当应用程序在后台请求位置后进入前台时才调用 didUpdateLocations

在前台单击推送通知横幅后如何触发操作

在特定视图控制器中处理 PushNotifcations

仅当元素具有两个特定类时如何在元素上触发函数