点击 UITextField 不起作用
Posted
技术标签:
【中文标题】点击 UITextField 不起作用【英文标题】:tap on UITextField not working 【发布时间】:2017-02-07 09:03:33 【问题描述】:我读了很多书试图找到一种方法来处理 uitextfield 点击,但对我没有任何作用
我想要什么:
我想在 UITextField 上添加点击并打开对话框
我尝试了什么:
class CreateMessagesViewController: UIViewController
@IBOutlet weak var testField: UITextField!
@IBOutlet weak var testView: UIView!
override func viewDidLoad()
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
// testField.addGestureRecognizer(tap)
testView.addGestureRecognizer(tap)
testField.addTarget(self, action: #selector(onTapped(_:)), for: .touchDown)
func onTapped(_ sender : UITextField)
print("Hello World")
func handleTap(_ sender: UITapGestureRecognizer)
print("Hello World")
如您所见,我尝试了两种方法:
-
UITapGestureRecognizer
选择器
为了测试,我添加了简单的 UIView 以确保点击正常工作。
为什么它在 uiTextField 上不起作用?我有什么遗漏的吗?
【问题讨论】:
How to get UITextField Tap Event?的可能重复 ios - Add Tap Gesture to UITextField的可能重复 尝试禁用文本字段的选择。或不使用手势苹果将提供 didBeginEditing 委托方法。 Add UITapGestureRecognizer to UITextView without blocking textView touches的可能重复 为什么不使用文本字段委托方法并检查此文本字段是否打开对话框 【参考方案1】:您可以编写打开对话框的代码,而不是添加手势识别器
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool
openDialog()//Function which will open the dialog
return false
我觉得应该和你想要的效果一样。
【讨论】:
【参考方案2】:1)添加手势识别器:
let tapGR = UITapGestureRecognizer(target: self, action: #selector(someFunc))
tapGR.delegate = self
textField.addGestureRecognizer(tapGR)
2)确保在必要时允许您的点击处理程序:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
return true //or add your custom check here if you need
如果没有第二部分,你会得到一个错误的 textField
,其中有时点击手势不起作用,有时默认手势未处理!
【讨论】:
【参考方案3】:将 GestureRecognizer 添加到 UITextField
superview 并检查是否有帮助:
testField.superview.addGestureRecognizer(tap)
【讨论】:
superview 不是这里的解决方案。【参考方案4】:我为您的问题创建了 Swift 和 Objective C 的示例之一,但它不起作用。我使用了 textField 的 Tap Gesture 识别器代码,但它甚至没有被调用。
在 Swift 和 Objective C 中的代码下面不工作
斯威夫特
let tap = UITapGestureRecognizer(target: self,action: #selector(handleTaponTextField(_:)))
tap.numberOfTapsRequired = 1
tap.delegate = self
txtFldTapMe.isUserInteractionEnabled = true
txtFldTapMe.addGestureRecognizer(tap)
func handleTaponTextField(_ sender: UITapGestureRecognizer)
print("Tap is handled here!")
目标 C
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapGesture.numberOfTapsRequired = 1;
tapGesture.delegate = self;
txtfldTapME.userInteractionEnabled = YES;
[txtfldTapME addGestureRecognizer:tapGesture];
func handleTaponTextField(_ sender: UITapGestureRecognizer)
print("Tap is handled here!")
然后我尝试使用以下 addTarget 操作方法为 textField 并且它工作正常。
在 Swift 和 Objective C 中的代码下方工作
斯威夫特
txtFldTapMe.addTarget(self, action: #selector(textFieldEditDidBegin(_:)), for: .editingDidBegin)
func textFieldEditDidBegin(_ textField: UITextField)
print("Text editing begin here!")
查看方法
你应该使用上面的textField方法
目标 C
[txtfldTapME addTarget:self action:@selector(editingDidBeginStarted:) forControlEvents: UIControlEventEditingDidBegin];
-(void)editingDidBeginStarted:(UITapGestureRecognizer *)sender
NSLog(@"Editing started here");
请参阅下面的 textField 方法
【讨论】:
您的tap.delegate = self
是做什么的? UITapGestureRecognizer
似乎因为您遗漏了某些东西而无法正常工作。【参考方案5】:
有一种更简单的方法可以实现这一点。您应该确认您的视图控制器类为UITextFieldDelegate
并在您的类中实现textFieldDidBeginEditing
。
func textFieldDidBeginEditing(_ textField: UITextField)
//show popup here
如果您有多个文本字段,请在情节提要(或代码)中为您的文本字段分配一个标签以识别文本字段。
func textFieldDidBeginEditing(_ textField: UITextField)
// check your tag here
if textField.tag == 0
//show your popup here
【讨论】:
【参考方案6】:试试下面的代码
yourTextField.addTarget(self, action: #selector(didChangeText), for: .editingChanged)
addSubview(view)
@objc func didChangeText(textField:UITextField)
let str = textField.text
//your functionality here
【讨论】:
【参考方案7】:这是不可能的。因为Textfield委托方法调用。
【讨论】:
链接按我的意愿工作***.com/a/42086875/2264402以上是关于点击 UITextField 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UITextField inputView 在 Swift 中不起作用
解雇 UIKeyboard 在 Objective-C 中不起作用
UITextField 触摸事件在 UIScrollView 中不起作用
UItextfield shouldChangeCharactersInRange 方法退格不起作用