解除特定字段上的键盘

时间:2016-01-02 23:43:34

标签: ios swift

我在Swift应用中使用此库来包含自定义选择器视图而不是默认选择器视图:https://github.com/kirkbyo/Dropper

我已经设置了库并且正常工作。在我使用此自定义选择器的相同视图中,我有一些文本字段。当我添加一个功能以在用户点击键盘时关闭键盘时,此库停止正常工作,您无法选择下拉列表中的任何项目。

以下是解除键盘的问题:

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)

func dismissKeyboard() {
    view.endEditing(true)
}
  • 如何在不破坏自定义选择器库的情况下使其工作?

  • 我可以将UITapGestureRecognizer限制为特定文本字段吗?

  • 当用户点击"返回"时,我可以让键盘解除吗?键而不是?

2 个答案:

答案 0 :(得分:2)

首先在textField.resignFirstResponder函数中使用view.endEditing(true)而不是dismissKeyboard。关于库中选择器的问题,请尝试将UITapGestureRecognizer添加到整个视图中,如果不起作用,请尝试将其添加到下拉视图中。

<强>更新

我下载了这个库,这对我来说很有用,可以隐藏滴管。

func dismissKeyboard(){
    if dropper.status != .Hidden {
       dropper.hideWithAnimation(0.1)
    }

    self.txtField.resignFirstResponder()
}

更新2

问题是UITapGesture覆盖了整个视图,因此我添加了UITapGusture的委托并添加了一些例外。

这样做:
在您的课程中添加UIGestureRecognizerDelegate,如下所示:

class ViewController: UIViewController, UIGestureRecognizerDelegate

将代表添加到您的点按手势

tap.delegate = self

并在您的扩展程序中添加

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
    if touch.view!.isKindOfClass(UIButton) || touch.view!.isKindOfClass(UITableViewCell) || touch.view!.superview!.isKindOfClass(UITableViewCell) {
        return false
    }
    return true
}

你应该好好去:)

答案 1 :(得分:0)

您的手势识别器可能会干扰您的自定义选择器触摸。

尝试通过点击并按住自定义选择器选择几秒来识别它,如果它正常工作,那么手势识别器肯定会干扰您的自定义选择器委托功能。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,shouldReceiveTouch touch: UITouch) -> Bool
{
    if ([touch.view isDescendantOfView:yourCustomPickerView]) {
        return false
    }
    return true
}