阻止UITextField编辑但检测点击

时间:2017-03-07 01:17:02

标签: ios swift uitextfield viewcontroller

我有一个UITextField,我正在尝试检测它上面的点击并阻止用户同时输入输入。方案是,我将使用警报视图让用户选择一个选项并将其写入UITextField,而不是用户使用键盘输入。

我尝试在viewDidLoad()中使用:

myTextField.delegate = self
myTextField.isEnabled = true
myTextField.isUserInteractionEnabled = false

// for keyboard
myTextField.inputView = UIView()

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didRecognizeTapGesture(_:)))
myTextField.addGestureRecognizer(tapGesture)

然而,此轻击手势无效:

private dynamic func didRecognizeTapGesture(_ gesture: UITapGestureRecognizer) {
    print("YYYY")
    let point = gesture.location(in: gesture.view)
    guard gesture.state == .ended, taxableField.frame.contains(point) else { return }
    //doSomething()
}

然后我尝试将userInteractionEnabled设为true,这次:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    if textField == myTextField {
        print("XXXX")
        return true
    }
    return true
}

这很有效,但是现在我可以长按并粘贴到文本字段中,因此它处于活动状态,它不会以这种方式显示键盘。

所以我试过的任何方式都不方便。你有什么建议来实现这个目标?

4 个答案:

答案 0 :(得分:1)

因此,要创建UIPickerView并将其添加为inputView,您需要一个委托和一个数据源。对于这个例子,我将假设你的VC将填补所有这些角色。我通常把这些分成自定义类,但我想保持这个简单:

// Data source for your picker view
var pickerViewData : [String]?
var myPickerView = UIPickerView()
@IBOutlet myTextField : UITextField!
func viewDidload() {
    myPickerView.delegate = self
    myPickerView.dataSource = self
    myTextField.delegate = self
    myTextField.inputView = pickerView
}

然后,要更新您的UITextField,无论何时使用选择器视图,都要实现正确的委托方法(除非您实现该方法,否则不会构建):

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    myTextField.text = pickerViewData![pickerView.selectedRow(inComponent: 0)]
}

那就是它!您还必须实现一些其他UIPickerView和UITextField委托和数据源方法;如果你不知道的话,我假设你可以弄清楚如何做到这一点。

答案 1 :(得分:0)

您可以使用UIPickerView来实现您的功能。如果选择器必须是AlertView,您可以用UILabel替换UITextField并在其上放置UIButton,然后您可以在UIButton回调中实现自定义操作并在UILabel中显示选择。

答案 2 :(得分:0)

您可以在UIButtonUITextField,并将其前导,尾随,顶部和底部与UITextField对齐。

然后为按钮添加操作。

禁用TextField。

答案 3 :(得分:0)

创建一个自定义的UIViewController,其背景颜色是清晰的,并添加UIPickerView以显示选项。当UITextField成为焦点时,显示UIViewController(覆盖在当前UIView之上)。因此,您可以在自定义UIViewController中执行句柄。