首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过UIViewController检测屏幕活动(Swift、iOS 9)

如何通过UIViewController检测屏幕活动(Swift、iOS 9)
EN

Stack Overflow用户
提问于 2016-01-26 05:22:03
回答 3查看 1.8K关注 0票数 1

我想创建一个UIViewController,它有一个超时,可以在一段时间后解开一个段,但会检测到屏幕活动并重置计时器。假设有一个密码输入屏幕,如果设备处于空闲状态,您希望屏幕超时。我认为iphone/ipad会超时,然后当你解锁并返回到那个应用程序时,我希望在这种情况下段也会解开。解决这一问题的最佳方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2016-01-26 05:46:02

十进制计时器

代码语言:javascript
运行
复制
var timer = NSTimer() 

在你的viewDidLoad中,一定要把计时器设置成你喜欢的任何值

这里的terminateApp将在60秒后调用

代码语言:javascript
运行
复制
timer = NSTimer.scheduledTimerWithTimeInterval(60, target: self, selector: Selector("terminateApp"), userInfo: nil, repeats: true)

func terminateApp(){
    // Do your segue and invalidate the timer
    timer.invalidate()
}

但是,如果用户按下您想要使计时器无效并启动新计时器的视图,请通过以下方式执行此操作:

在您的viewDidLoad中,添加一个在用户触摸屏幕时调用resetTimer的gestureRecognizer

代码语言:javascript
运行
复制
let resetTimer = UITapGestureRecognizer(target: self, action: "resetTimer");
self.view.userInteractionEnabled = true
self.view.addGestureRecognizer(resetTimer)

func resetTimer(){
    // invaldidate the current timer and start a new one
    timer.invalidate()
    timer = NSTimer.scheduledTimerWithTimeInterval(60, target: self, selector: Selector("terminateApp"), userInfo: nil, repeats: true)
}
票数 5
EN

Stack Overflow用户

发布于 2016-01-26 05:46:02

您可以为UIApplicationDidBecomeActiveNotification注册视图控制器

代码语言:javascript
运行
复制
NSNotificationCenter.defaultCenter().addObserver(self, selector: "yourFunction", name: UIApplicationDidBecomeActiveNotification, object: nil)

或者从AppDelegate中的applicationDidBecomeActive调用视图控制器中的相关函数。

你也可以在applicationDidResignActive被调用的时候处理一些事情,在你去后台而不是回来的时候做一些事情。这样做的好处是,如果用户接听电话等,而不是等待计时器,则可以立即进行更改。您可以使用计时器方法,在应用程序仍在屏幕上时处理不活动-然后在应用程序退出活动时,使用应用程序委托方法使计时器无效。

票数 1
EN

Stack Overflow用户

发布于 2016-01-26 05:52:29

根据您试图支持的交互,您有几个选项。

要检测触摸,你可能想要将UIViewControllerview设置为某个customer UIView子类,它重写-hitTest:withEvent:向其控制器或其他代理报告触摸交互。或者,你可以定义一个手势识别器来报告该视图中的触摸。任何一个都将检测控制器的子视图上的触摸,但不一定检测键盘事件(来自屏幕上的键盘,该键盘不是控制器视图层次结构的一部分,或者来自硬件键盘)。

对于键盘事件,您可能需要依赖一个UITextFieldDelegate,它是-textField:shouldChangeCharactersInRange:replacementString:。我不能立即想到一种应用程序或视图范围的方法来检测这些输入。

为了检测设备被锁定或应用程序失去焦点,您可能希望对UIApplicationWillResignActiveNotification通知做出反应。

你想要哪一个需要更多的细节,我无法从你的问题中提取出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35002617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档