Swift iOS开发:UITextField为空时隐藏UIButton逻辑不生效问题
问题原因
你写的按钮显隐判断逻辑仅在viewDidLoad方法中执行了一次,只会在页面首次加载时生效。后续你在文本框中输入内容时,没有触发重新判断按钮状态的逻辑,所以按钮不会自动切换显隐状态。
解决方法
你需要给两个UITextField添加内容变化的监听,每次文本框内容修改时都重新判断按钮的显隐状态,具体修改代码如下:
- 首先封装一个单独更新按钮状态的公共方法,避免重复写判断逻辑:
func updateKaydetButtonStatus() { // 做判空处理避免强制解包崩溃,只要任意一个文本框不为空就显示按钮 let isAllEmpty = (isimTextField.text?.trimmingCharacters(in: .whitespaces).isEmpty ?? true) && (notTextField.text?.trimmingCharacters(in: .whitespaces).isEmpty ?? true) lokasyonuKaydet.isHidden = isAllEmpty }
如果不需要过滤用户输入的纯空格内容,可以删掉trimmingCharacters相关代码
- 在
viewDidLoad中给两个文本框添加编辑事件监听,同时删掉原来你写在viewDidLoad里的按钮显隐判断代码,改为调用公共方法初始化状态:
override func viewDidLoad() { super.viewDidLoad() // 你原来的地图、定位、手势相关代码保留不动 mapView.delegate = self locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(konumSec(gestureRecognizer:))) mapView.addGestureRecognizer(gestureRecognizer) let keyboardGR = UITapGestureRecognizer(target: self, action: #selector(klavyeyiKapat)) self.view.addGestureRecognizer(keyboardGR) // 新增文本框内容变化监听 isimTextField.addTarget(self, action: #selector(textFieldContentChanged), for: .editingChanged) notTextField.addTarget(self, action: #selector(textFieldContentChanged), for: .editingChanged) // 初始化按钮状态 updateKaydetButtonStatus() }
- 实现文本框内容变化的回调方法,每次内容变化都更新按钮状态:
@objc func textFieldContentChanged() { updateKaydetButtonStatus() }
- 可额外在关闭键盘的方法中也调用一次更新逻辑,覆盖极端场景:
@objc func klavyeyiKapat() { view.endEditing(true) updateKaydetButtonStatus() }
内容的提问来源于stack exchange,提问作者Newbie Swift Coder
相关产品推荐
相关产品推荐

