我的故事板中有此设置。
在我的第一个ViewController场景中,我有一个MapBox的MapView。在那里我放了一个TextField(AddressTextField)。在触摸视图时,在TextField上,我正在运行self.addressTextField.resignFirstResponder()
,但在此之后,mapview或其中任何其他元素或嵌入式Segues中的任何元素都不会在触摸或单击时作出反应。可能这是因为我没有完全理解First Responder
的系统。我很感谢你的每一个帮助。
编辑1:
我想我知道现在发生了什么,但我不知道如何解决它。当我将手势识别器添加到View
(或mapView
,这无关紧要)时,其他UIViews和MapView不再识别我的Tap-Gestures。当我没有添加识别器时,一切正常。似乎手势识别器正在识别我在UIViews
或MapView
上进行的每次点按,因此无法识别其他手势。
编辑2:
我刚刚向print()
添加了dismissKeyboard()
。只要在MapView
或其他UIViews
上识别出任何触摸事件,就会调用dismissKeyboard()
。所以我认为我对Edit 1的想法是正确的。有谁知道我怎么能解决这个问题,所以不仅dismissKeyboard()
被调用了?
一些代码:
func dismissKeyboard(){
self.addressTextField.resignFirstResponder()
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
dismissKeyboard()
return true
}
//Class (only partially)
class ViewController: UIViewController, MGLMapViewDelegate, CLLocationManagerDelegate, UITextFieldDelegate {
override func viewDidLoad(){
mapView.delegate = self
addressTextField.delegate = self
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
self.mapView.addGestureRecognizer(tap)
}
}
其他人只是@IBAction
链接到按钮或其他元素。
答案 0 :(得分:0)
试试这个:
func dismissKeyboard(){
view.endEditing(true)
}
希望它有所帮助!
答案 1 :(得分:0)
在我知道真正的问题后,我能够解决问题。我宣布了var keyboardEnabled
。然后我将这些行添加到我的班级。
class ViewController: UIViewController, UIGestureRecognizerDelegate {
var keyboardEnabled = false
override func viewDidLoad(){
super.viewDidLoad()
//Looks for single tap
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
self.mapView.addGestureRecognizer(tap)
}
/* Setting keyboardEnabled */
//Editing Target did end
@IBAction func editingTargetDidEnd(_ sender: Any) {
keyboardEnabled = false
}
//Editing TextField Started
@IBAction func editingAdressBegin(_ sender: Any) {
keyboardEnabled = true
}
//Call this function when the tap is recognized.
func dismissKeyboard() {
self.mapView.endEditing(true)
keyboardEnabled = false
}
//Implementing the delegate method, so that I can add a statement
//decide when the gesture should be recognized or not
//Delegate Method of UITapGestureRecognizer
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return keyboardEnabled
}
}
使用此解决方案keyboardEnabled
负责决定我的UIGestureRecognizer
应该做出反应。如果识别器没有反应,则只需将手势传递给我的MapView中的UIViews或其他元素。
感谢您的所有答案!