我读了很多试图找到一种处理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")
}
}
如你所见,我试过两种方法:
为了测试,我添加简单的UIView以确保点击工作正常并且有效。
为什么它在uiTextField上不起作用?我有什么遗漏的吗?
答案 0 :(得分:3)
您可以在
中编写用于打开对话框的代码,而不是添加手势识别器func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{
openDialog()//Function which will open the dialog
return false
}
我认为它应该具有你想要的相同效果。
答案 1 :(得分:0)
将GestureRecognizer添加到UITextField
superview并检查是否有帮助:
testField.superview.addGestureRecognizer(tap)
答案 2 :(得分:0)
我为你的问题创建了样本一,包括Swift和Objective C,但它没有用。我使用了TapFsture识别器代码用于textField,但它甚至没有调用。
在Swift和Objective C中的Code下面没有工作
<强>夫特强>
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!")
}
然后我尝试使用下面的textField的addTarget动作方法,它工作正常。
在Swift和Objective C中的Code下面工作
<强>夫特强>
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方法
答案 3 :(得分:0)
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
的越野车,在该越野车中,有时轻按手势无效,有时无法处理默认手势!
答案 4 :(得分:0)
有一种更简单的方法可以实现此目的。您应该确认您的视图控制器类为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
}
}
答案 5 :(得分:0)
尝试下面的代码
yourTextField.addTarget(self, action: #selector(didChangeText), for: .editingChanged)
addSubview(view)
@objc func didChangeText(textField:UITextField) {
let str = textField.text
//your functionality here
}
答案 6 :(得分:-1)
这是不可能的。因为Textfield委托方法调用。