`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` 函数如何被忽略?的主要内容,如果未能解决你的问题,请参考以下文章

函数创建但语句被忽略

iOS被忽略的main函数

为啥我的覆盖保护函数 createChildren 被忽略?

jQuery函数单引号被忽略

Swift:为自定义视图添加 Tap

C++:类中两个易被忽略的默认函数