检测点击是否在UITextView之外

时间:2015-02-28 04:39:33

标签: ios swift uitextview

我正在开发一个程序,我有各种UITextView个。我遇到的问题是我无法检测到用户何时在UITextView之外轻敲,以便我可以隐藏键盘。我尝试了各种各样的行动,但没有一个行动。

我正在使用的代码:

@IBAction func touchOutsideTextField(sender: UITextField)
{
    sender.resignFirstResponder()
}

我应该怎么做才能隐藏键盘而不是这个?

2 个答案:

答案 0 :(得分:1)

您可以使用UITapGestureRecognizer

将TapGesture添加到View中,当点击View时,keyBoard将隐藏。

以下是您的示例代码。

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var text: UITextView!
@IBOutlet weak var text2: UITextView!
@IBOutlet weak var text3: UITextView!
@IBOutlet weak var text4: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()

    let aSelector : Selector = "touchOutsideTextField"
    let tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
    tapGesture.numberOfTapsRequired = 1
    view.addGestureRecognizer(tapGesture)
}

func touchOutsideTextField(){

    self.view.endEditing(true)

    }

}

或者您可以使用touchesBegan方法添加此代码,如果您想尝试这种方式。

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

    self.view.endEditing(true)
}

使用此代码,您无需添加UITapGestureRecognizer

您可以选择其中一个选项。

答案 1 :(得分:0)

对于仍在使用Obj C的用户,以下是翻译:

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [super touchesBegan:touches withEvent:event];
    [self.view endEditing:TRUE];
}

Apple在他们的文档中说,如果您省略对super的调用,那么您还必须覆盖其他触摸方法...即使您不使用它们。有关更多信息,请参见以下链接:touchesBegan:withEvent: