У меня есть два textFields
и TableView
.Tableview
должен быть изначально отключен (то есть labels
неактивен, а cells
не активируется).Когда оба значения textFields
имеют значения, я хочу, чтобы TableView
и tableViewCells
были активными, а не серыми.До сих пор я добавил цели к обоим textfields
, чтобы отслеживать, когда пользователь редактирует:
var isUserEditing: Bool = false
func setup() {
mealItemTextField.addTarget(self, action: #selector(userIsEditing), for: UIControl.Event.editingChanged)
priceTextField.addTarget(self, action: #selector(userIsEditing), for: UIControl.Event.editingChanged)
}
@objc func userIsEditing(sender: UITextField) {
sender.text = sender.text?.trimmingCharacters(in: .whitespaces)
guard
let mealtext = mealItemTextField.text, !mealtext.isEmpty,
let pricetext = priceTextField.text, !pricetext.isEmpty
else
{
isUserEditing = false
return
}
isUserEditing = true
}
Затем я создал расширение для UITableViewCell
, которое в основном «включает» и «отключает»tableView
(извлечено из этого потока):
extension UITableViewCell {
func enable(on: Bool) {
for view in contentView.subviews {
view.isUserInteractionEnabled = on
view.alpha = on ? 1 : 0.5
}
}
}
Наконец, я реализовал этот метод, а также переменную isUserEditing
в моем viewForHeaderInSection
:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let userModel = Data.userModels[section]
let cell = tableView.dequeueReusableCell(withIdentifier: "nameCell") as! NameHeaderTableViewCell
cell.setup(model: userModel)
cell.enable(on: false)
if isUserEditing == true {
cell.enable(on: true)
}
return cell.contentView
}
* * * * * * * * * * * * * * * tableView
появляется "отключенным" при загрузке представления, однако, когда я начинаю вводить один или оба из textFields
, он остается отключенным.Очевидно, что viewForHeaderInSection
не перезагружается или не выполняется снова.
Есть ли способ добиться этого?Можно ли запустить viewForHeaderInSection
в режиме реального времени и автоматически обновлять?Спасибо за любую помощь, спасибо!
Это должен быть начальный вид, когда в textField нет текста
Это должен быть вид после того, как естьнекоторый текст в обоих текстовых полях