Ios Swift-使用计时器检测用户不活动,然后在4分钟后显示警报,提示用户是否仍在活动
我有一个基本的iPad应用程序,它由4个视图组成。在整个应用程序中,我希望能够检测到用户不活动,然后在4分钟后显示一个警报,询问用户是否仍在 我已经找到了一些有用的资源,用于。我已经玩了这些教程,可以让计时器自己工作。然而,这是我第一次在Swift中开发,所以我想了解一些将计时器连接到警报的最佳方法的指导?我希望计时器运行4分钟,然后创建警报Ios Swift-使用计时器检测用户不活动,然后在4分钟后显示警报,提示用户是否仍在活动,ios,swift,timer,uialertcontroller,uialertaction,Ios,Swift,Timer,Uialertcontroller,Uialertaction,我有一个基本的iPad应用程序,它由4个视图组成。在整个应用程序中,我希望能够检测到用户不活动,然后在4分钟后显示一个警报,询问用户是否仍在 我已经找到了一些有用的资源,用于。我已经玩了这些教程,可以让计时器自己工作。然而,这是我第一次在Swift中开发,所以我想了解一些将计时器连接到警报的最佳方法的指导?我希望计时器运行4分钟,然后创建警报 我还想知道最好的地方是把这些元素的代码放在哪里,这样它们就可以在我的所有4个视图中工作。例如,是否有一个地方可以放置代码并重用它,而不是让它在4个视图中重
我还想知道最好的地方是把这些元素的代码放在哪里,这样它们就可以在我的所有4个视图中工作。例如,是否有一个地方可以放置代码并重用它,而不是让它在4个视图中重复 您可以在AppDelegate本身中运行计时器,并从AppDelegate显示如下所示的警报
func showAlertFromAppDelegates(){
let alertVC = UIAlertController(title: "Oops" , message: "Presented Alert from AppDelegates", preferredStyle: UIAlertController.Style.alert)
let okAction = UIAlertAction(title: "Okay", style: UIAlertAction.Style.cancel) { (alert) in
}
alertVC.addAction(okAction)
var presentVC = self.window!.rootViewController
while let next = presentVC?.presentedViewController
{
presentVC = next
}
presentVC?.present(alertVC, animated: true, completion: nil)
}
编辑:
添加了与计时器相关的代码,当要启动非活动时调用startTimer(),当非活动结束时调用stopTimer()
func startTimer()
{
let interval = 4*60
timer = Timer.scheduledTimer(timeInterval: TimeInterval(interval), target: self, selector: #selector(self.showAlertFromAppDelegates), userInfo: nil, repeats: true)
}
func stopTimer()
{
if let timer = timer
{
timer.invalidate()
}
timer = nil
}
首先,您可以按照此处的说明设置计时器: 然后,您可以执行以下操作来处理超时通知:
extension UIViewController {
func observeTimeout() {
NotificationCenter.default.addObserver(
self,
selector: #selector(handleTimeout),
name: .appTimeout,
object: nil)
}
@objc func handleTimeout() {
let alert = UIAlertController(title: "Timeout", message: "Oh no!", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in
}))
present(alert, animated: true, completion: nil)
}
}
然后在每个视图控制器中执行以下操作以注册超时:
class SomeViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
observeTimeout()
}
}
这是如何检测不活动的?我的答案是“我想要一些关于如何将计时器连接到警报的最佳方法的指导”。我的假设是他知道如何检测不活动,他只需要帮助管理计时器和警报。我不同意这一点,但让我们看看OP是否会得到一些澄清。他显然是这么说的“我还想知道最好的地方是把这些元素的代码放在哪里,这样它们就能在我所有的4个观点中发挥作用。”我不明白为什么人们会投票反对这个问题。