【发布时间】:2017-07-22 23:39:01
【问题描述】:
我的目标是在这两个文本字段为空时禁用完成按钮。我有顶部按钮的逻辑,但只要顶部文本字段“taskNameTextFIeld”至少有一个字符,完成按钮就会启用。我不希望用户能够在“timeTextField”为空时按下完成。你可以在 textField() 中看到我目前拥有的内容。
import UIKit
protocol AddNewTaskViewControllerDelegate: class {
func addNewTaskViewControllerDidCancel(_ controller: AddNewTaskViewController)
func addNewTaskViewController(_ controller: AddNewTaskViewController,
didFinishAdding item: TaskData)
}
class AddNewTaskViewController: UITableViewController, UITextFieldDelegate {
@IBOutlet weak var taskNameTextFIeld: UITextField!
@IBOutlet weak var timeTextFIeld: UITextField!
@IBOutlet weak var doneBarButton: UIBarButtonItem!
weak var delegate: AddNewTaskViewControllerDelegate?
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let oldText = textField.text! as NSString
let newText = oldText.replacingCharacters(in: range, with: string) as NSString
doneBarButton.isEnabled = newText.length > 0
return true
}
@IBAction func cancel(_ sender: Any) {
delegate?.addNewTaskViewControllerDidCancel(self)
}
@IBAction func done(_ sender: Any) {
let item = TaskData()
item.task = taskNameTextFIeld.text!
item.time = timeTextFIeld.text!
delegate?.addNewTaskViewController(self, didFinishAdding: item)
}
func textFieldShouldReturn(_ TextField: UITextField) -> Bool {
self.view.endEditing(true)
return false
}
override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
return nil
}
override func viewDidLoad() {
super.viewDidLoad()
self.taskNameTextFIeld.delegate = self;
self.timeTextFIeld.delegate = self;
// Do any additional setup after loading the view.
}
}
【问题讨论】:
-
实际发生了什么?
-
当我填写顶部文本字段时,doneBarButton 变为启用状态,我需要它保持禁用状态,直到两个字段都输入文本