Ios 点击UITextField不工作
我读了很多书,试图找到一种处理uitextfield单击的方法,但对我来说没有任何效果 我想要的是: 我想在UITextField上添加点击并打开对话框 我尝试的是:Ios 点击UITextField不工作,ios,objective-c,iphone,swift,swift3,Ios,Objective C,Iphone,Swift,Swift3,我读了很多书,试图找到一种处理uitextfield单击的方法,但对我来说没有任何效果 我想要的是: 我想在UITextField上添加点击并打开对话框 我尝试的是: class CreateMessagesViewController: UIViewController { @IBOutlet weak var testField: UITextField! @IBOutlet weak var testView: UIView! override func vie
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")
}
}
如您所见,我尝试了两种方法:
为什么它在uiTextField上不起作用?我错过了什么吗?不可能。因为Textfield委托方法调用 将手势识别器添加到
UITextField
superview,并检查是否有帮助:
testField.superview.addGestureRecognizer(tap)
您可以在中编写打开对话框的代码,而不是添加手势识别器
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{
openDialog()//Function which will open the dialog
return false
}
我认为它应该具有与您想要的相同的效果。我为您的问题创建了一个示例,包括Swift和Objective C,但它不起作用。我使用了文本字段的点击手势识别器代码,但它甚至没有调用 未在Swift和Objective C中的代码下工作 Swift
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!")
}
txtFldTapMe.addTarget(self, action: #selector(textFieldEditDidBegin(_:)), for: .editingDidBegin)
func textFieldEditDidBegin(_ textField: UITextField) {
print("Text editing begin 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!")
}
[txtfldTapME addTarget:self action:@selector(editingDidBeginStarted:) forControlEvents: UIControlEventEditingDidBegin];
-(void)editingDidBeginStarted:(UITapGestureRecognizer *)sender{
NSLog(@"Editing started here");
}
然后我尝试了textField下面的addTarget操作方法,效果很好
在Swift和Objective C代码下工作
Swift
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!")
}
txtFldTapMe.addTarget(self, action: #selector(textFieldEditDidBegin(_:)), for: .editingDidBegin)
func textFieldEditDidBegin(_ textField: UITextField) {
print("Text editing begin here!")
}
参见方法
您应该使用上述textField方法
目标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!")
}
[txtfldTapME addTarget:self action:@selector(editingDidBeginStarted:) forControlEvents: UIControlEventEditingDidBegin];
-(void)editingDidBeginStarted:(UITapGestureRecognizer *)sender{
NSLog(@"Editing started here");
}
请参阅下面的textField方法
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
,有时候点击手势不起作用,有时候默认手势不被处理 有一种更简单的方法来实现这一点。您应该将视图控制器类确认为UITextFieldDelegate
,并在类中实现textfieldDiBeginediting
func textFieldDidBeginEditing(_ textField: UITextField){
//show popup here
}
如果有多个文本字段,请在情节提要(或代码)中为文本字段指定一个标记以识别文本字段
func textFieldDidBeginEditing(_ textField: UITextField){
// check your tag here
if textField.tag == 0{
//show your popup here
}
}
试试下面的代码
yourTextField.addTarget(self, action: #selector(didChangeText), for: .editingChanged)
addSubview(view)
@objc func didChangeText(textField:UITextField) {
let str = textField.text
//your functionality here
}
可能重复的可能重复的尝试禁用文本字段的选择。或者在不使用手势的情况下,apple将提供didBeginEditing委托方法。为什么不使用textfield委托方法的可能重复项,并检查此textfield然后打开对话框SuperView是否不是此处的解决方案。链接按我所需工作。您的
点击.delegate=self
做什么?似乎由于您遗漏了某些内容,UITapGestureRecognitor
无法正常工作。