我有UIViewController
个UITextField
个。{点击一个文本字段时,它应显示条形码扫描视图控制器。扫描完成后,我的条形码扫描视图控制器正在消失(使用" dismissViewcontroller"),扫描的值应输入我点击的文本字段。这工作正常。我已经像这样为每个文本字段设置了委托。
[field addTarget:metrixUIViewControllerIn action:@selector(executeScriptOnTextFieldChange:) forControlEvents:UIControlEventEditingChanged];
问题是:
假设我已在此executeScriptOnTextFieldChange
方法中设置了警告。一旦我点击第一个文本字段,条形码扫描仪就会出现。一旦我扫描条形码扫描仪关闭并设置第一个文本字段的值并触发警报。确定。 但是如果通过点击第二个文本字段扫描并且字符串将设置为该文本字段并触发与第二个文本字段相关的警报也会触发与第一个文本字段相关的警报。我想要停止发生这种情况。有没有办法禁用一个文本字段的委托?发生这种情况是因为我正在刷新viewDidAppear
中的视图。但我也必须这样做。请帮帮我。
答案 0 :(得分:0)
textField的UIControlEventEditingChanged可以触发许多与该textField甚至没有直接关系但直接相关的不同事件。
例如,当您的ViewController呈现barcodeScanner时,它可能会在textField上触发“resignFirstResponder”事件。此外,当点击第二个textField时,导致第二个成为第一个响应者,第一个遭受“resignFirstResponder”。
我建议您尝试在textField中使用UITapGestureRecognizer。例如:
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.textField.tag = 1
self.textField.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(fireTextField(_:))))
}
@objc func fireTextField(_ sender: UIGestureRecognizer){
let view = sender.view
guard view != nil else{
//Do nothing
return
}
let condition = view!.tag == 1
if condition{
//or do whatever other stuff you need
self.textField.becomeFirstResponder()
}else{
//Whatever for other textFields
}
}
这样,你可以使用“tag”属性来确定哪个textField正在触发,因此调整“condition”。您还可以使用“标签”来切换流量。
不确定这是否真的有用,因为我需要更多关于您需要完成的流程的信息。希望它确实有帮助!