`tap` 函数如何被忽略?
Posted
技术标签:
【中文标题】`tap` 函数如何被忽略?【英文标题】:How does the `tap` function get ignored? 【发布时间】:2016-07-18 20:06:36 【问题描述】:按照 Apple 的Guide to build a MealKeeper app,我能够创建一个文本字段和一个图像视图。在图像视图顶部拖放UITapGestureRecognizer
后,我添加了代码以通过使文本字段退出来隐藏键盘。
当我在模拟器中运行此代码时,我首先单击文本字段,出现键盘。 然后我点击图像视图,键盘没有隐藏。
tap
函数如何被忽略?
【问题讨论】:
请不要链接到您期望下载和调试的整个项目。在此处包含必要的信息,以便问题是独立的。 我上传项目(代码行数很少)的唯一原因是 IDE(在本例中为 XCode)可能在某些元数据文件中做了一些幕后工作。我不知道这些更改是否相关,或者我是否需要更改我的项目类型或其他任何内容。 ...您也不需要在问题中包含答案;这正是公认的答案功能的用途。 我想通过添加屏幕截图来帮助未来的研究人员。为了澄清目的,我本可以在已接受答案的评论中添加屏幕截图。不过SO在评论区没有截图上传。 还不错;在这种情况下,请添加您自己的答案(这是允许的,是的!)或将其编辑为接受的答案。 【参考方案1】:您需要将手势添加到您的 imageview,为您的 imageview 创建一个 IBOutlet 并将以下内容添加到“viewDidLoad”。
let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:Selector("tap:"))
imageView.userInteractionEnabled = true
imageView.addGestureRecognizer(tapGestureRecognizer)
祝你好运。
【讨论】:
谢谢。你的建议提醒我错过了一步:设置图片视图属性User Interaction Enabled
。【参考方案2】:
对于依赖 IDE 解决此问题的学习者,您需要启用图像视图的用户交互。
【讨论】:
【参考方案3】:您可以在其上添加触摸代理和退出文本字段键盘。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan)
[self.myTextField resignFirstResponder];
【讨论】:
【参考方案4】:最新的 Swift 2.3 中的语法有点不同
class ViewController: UIViewController
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var imageView: UIImageView!
@IBAction func tap(sender: UITapGestureRecognizer)
textField.resignFirstResponder()
override func viewDidLoad()
super.viewDidLoad()
let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:#selector(ViewController.tap(_:)))
imageView.userInteractionEnabled = true
imageView.addGestureRecognizer(tapGestureRecognizer)
【讨论】:
以上是关于`tap` 函数如何被忽略?的主要内容,如果未能解决你的问题,请参考以下文章