Xcode 9、iOS 11下如何禁用空TextField时Alert的Add按钮?
解决UITextField为空时禁用添加按钮的问题
嘿,这个需求很常见,我帮你调整下代码就能实现——让「Add Item」按钮在文本框为空(或者只有空格)的时候处于禁用状态,用户输入有效内容后才激活。核心思路是给文本框添加内容变化的监听,动态控制按钮的启用状态:
@IBAction func addButtonPressed(_ sender: UIBarButtonItem) { var textField = UITextField() let alert = UIAlertController(title: "Add New Task", message: "", preferredStyle: .alert) // 1. 先创建按钮,初始设为禁用状态 let action = UIAlertAction(title: "Add Item", style: .default) { (action) in let newItem = Item(context: self.context) newItem.title = textField.text! newItem.done = false newItem.parentCategory = self.selectedCategory self.itemArray.append(newItem) self.saveItems() } action.isEnabled = false // 初始禁用按钮 alert.addTextField { (alertTextField) in alertTextField.placeholder = "Create new item" textField = alertTextField // 2. 给文本框添加内容变化监听 alertTextField.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged) } alert.addAction(action) present(alert, animated: true, completion: nil) } // 3. 监听文本变化的方法,动态控制按钮状态 @objc func textFieldDidChange(_ textField: UITextField) { // 获取弹窗里的添加按钮 guard let alert = presentedViewController as? UIAlertController, let addAction = alert.actions.first else { return } // 判断文本是否有效(去掉首尾空格后不为空) let isTextValid = !(textField.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "").isEmpty addAction.isEnabled = isTextValid }
关键改动说明:
- 初始创建
UIAlertAction时,把isEnabled设为false,确保打开弹窗时按钮是不可点击的灰色状态 - 给文本框添加
.editingChanged事件的监听,每次用户输入或删除内容都会触发textFieldDidChange方法 - 在监听方法里,先获取到弹窗里的添加按钮,再判断文本框内容(去掉首尾空格后)是否为空,以此来切换按钮的启用状态
这样就能完美解决空内容可以添加的问题啦!
内容的提问来源于stack exchange,提问作者forrest
相关产品推荐
相关产品推荐

