我在Swift应用中使用此库来包含自定义选择器视图而不是默认选择器视图:https://github.com/kirkbyo/Dropper
我已经设置了库并且正常工作。在我使用此自定义选择器的相同视图中,我有一些文本字段。当我添加一个功能以在用户点击键盘时关闭键盘时,此库停止正常工作,您无法选择下拉列表中的任何项目。
以下是解除键盘的问题:
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
func dismissKeyboard() {
view.endEditing(true)
}
如何在不破坏自定义选择器库的情况下使其工作?
我可以将UITapGestureRecognizer
限制为特定文本字段吗?
当用户点击"返回"时,我可以让键盘解除吗?键而不是?
答案 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
}