![](/img/trans.png)
[英]Prevent editing UITextField but not the user interaction in Swift
[英]Prevent UITextField editing but detect taps
我有一个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
}
这行得通,但是现在我可以长按并粘贴到文本字段中,因此它处于活动状态,只是没有以这种方式显示键盘。
因此,我尝试过的任何方法似乎都不方便。 您对实现这种目标有何建议?
因此,要创建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委托和数据源方法。 我假设您不知道该怎么做。
您可以将UIButton
放在UITextField
并将其前导,尾随,顶部和底部与UITextField
对齐。
然后为按钮添加一个动作。
禁用TextField。
您可以使用UIPickerView来实现您的功能。 如果选择器必须是AlertView,则可以将UITextField替换为UILabel并在其上放置UIButton,然后可以在UIButton回调中实现自定义操作,并在UILabel中显示选择。
创建一个自定义的UIViewController,背景颜色清晰,并添加一个UIPickerView来显示选项。 当UITextField成为焦点时,显示UIViewController(在当前UIView上方叠加)。 因此,您可以在自定义UIViewController中进行处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.