使用从任何超级视图开始的触摸来识别触摸

时间:2019-11-10 19:33:46

标签: ios swift

我创建了一个包含UITextField的自定义视图

enter image description here

我已将UITextView的委托设为自定义视图,以便将有关该视图的行为封装到其自己的文件中。然后,当有人触摸屏幕时,我便开始使用触摸来关闭键盘

@IBDesignable
class NewPostView:UIView {

    @IBOutlet weak var newPostTextView: UITextView!

    func setup() {
    ...
        newPostTextView.delegate = self
    }
...

    /* Closes the keyboard when somewhere else on the screen is touched */
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
        closeKeyboard()
    }

但是,仅当触摸了自定义视图时,才关闭键盘。考虑到我仍然希望尽可能多地封装自定义视图,我想知道关闭文本字段的最佳方法是什么时候触摸屏幕。


我不知道如何将委托分配给视图控制器。我尝试过newPostTextView.delegate = self.superview(),但这会将它附加到超级视图而不是视图控制器上

1 个答案:

答案 0 :(得分:1)

该视图仅拦截其区域内的触摸。

您需要在父视图(或涵盖所讨论屏幕空间的视图)上设置touchesBegan,或者我建议使用tapGestureRecognizer。它封装了更好的IMO。