随时随地快速检测触摸
Posted
技术标签:
【中文标题】随时随地快速检测触摸【英文标题】:Swift Detect Touch Anywhere 【发布时间】:2015-01-06 00:58:32 【问题描述】:我正在使用 Swift 编写我的第一个应用程序,我需要一个可以通过触摸屏幕上的任意位置来关闭的弹出框或模态视图。
我正在编写一个借据应用程序,目前正在研究用户进入贷方的位置以及他们借出多少的视图。显然,每个贷方都需要有一个唯一的名称,并且每当用户尝试输入相同的名称两次要求他们更改名称时,我希望出现一个弹出窗口或模式视图。为了减少刺激因素,我想让用户可以点击屏幕上的任意位置来消除警告,而不是点击特定按钮。
我找到了这个答案:Detect touch globally,我认为它可能对我有用,但我对 Objective-C 一无所知,只知道 Swift,而且理解不够,不知道该怎么做。
【问题讨论】:
【参考方案1】:取消模态视图非常容易。您需要做的就是致电dismissViewControllerAnimated(true, completion: nil)
。因此,要做我想做的事,我需要做的就是:
override func touchesEnded(touches: NSSet, withEvent event: UIEvent)
dismissViewControllerAnimated(true, completion: nil)
super.touchesEnded(touches, withEvent: event)
【讨论】:
【参考方案2】:Swift 3.0
// Add this to your UIViewController class
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
//Do thing here
【讨论】:
【参考方案3】:我个人不知道如何消除弹出框,因为我没有使用过它们,但我可以解决您的一个问题。您说您想在用户触摸屏幕上的任何位置时关闭弹出框或模态框。这是一个在屏幕在任何位置被触摸时触发的功能,您可以在apple documents中阅读更多信息。
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
【讨论】:
谢谢!这正是我想要的功能!【参考方案4】:我通过添加 UIGestureRecognizer 找到了一个很好的方法。
在 AppDelegate 中符合 UIGestureRecognizerDelegate,将其添加到您的
class AppDelegate: UIResponder, UIApplicationDelegate, UIGestureRecognizerDelegate
...
添加点击手势
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
// Override point for customization after application launch.
// add tapGestures to entire application
let tapGesture = UITapGestureRecognizer(target: self, action: nil)
tapGesture.delegate = self
window?.addGestureRecognizer(tapGesture)
return true
添加gestureRecognizer协议功能:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
// User tapped on screen, do something
return false
【讨论】:
【参考方案5】:我想让用户可以点击屏幕上的任意位置来消除警告,而不是点击特定按钮。
这可能是一个非常非常糟糕的主意,您可能会遇到与您的文本字段或模态视图中的其他元素的手势冲突,或者您可能会在用户意外关闭模态时让用户感到不安,但是,嘿,不管你船。
在模态视图中获取最顶层视图控制器的视图。如果它是包含YourModalViewController
的UINavigationController
,您可以在模态的viewDidLoad
中执行此操作:
if let navController = self.navigationController
navController.view.addGestureRecognizer(UITapGestureRecognizer(...))
然后从手势识别器的操作方法中关闭您的模式。
【讨论】:
【参考方案6】:斯威夫特 4.2:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
// Touch began
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
// Touch end
【讨论】:
【参考方案7】:我正在开发一个应用程序。我们需要保持 10-15 分钟的会话。为此,我正在寻找用户的触摸事件。
我已经在应用程序中安装了基本控制器。所以我更新了 viewwillappear 上的会话。我不需要任何触摸事件。
【讨论】:
以上是关于随时随地快速检测触摸的主要内容,如果未能解决你的问题,请参考以下文章