как включить кнопку когда все текстовые поля заполнены в ячейке табличного вида (SWIFT) - PullRequest
0 голосов
/ 26 октября 2018

Я хочу включить кнопку в контроллере представления, когда я заполняю текстовое поле в ячейке таблицы.

Я не знаю, как решить проблему.

Извините.Я незрелый на английском языке.

  1. кнопка (viewController) isEnable = false
  2. заполнить текстовые поля (внутри tableviewcell)
  3. кнопка (viewController) isEnable = true

enter image description here

1.ViewController

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {

    @IBOutlet var tableView: UITableView!
    @IBOutlet var viewLabel: UILabel!
    @IBOutlet var clickBtn: UIButton!

    var cell: CustomTableViewCell!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.clickBtn.isEnabled = false
        cell.textFieldCell.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        cell.textFieldCell2.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    }

    @objc func editingChanged(sender: UITextField) {

        sender.text = sender.text?.trimmingCharacters(in: .whitespaces)

        guard
            let text1 = cell.textFieldCell.text, !text1.isEmpty,
            let text2 = cell.textFieldCell2.text, !text2.isEmpty
            else
        {
            self.clickBtn.isEnabled = false
            return
        }
        clickBtn.isEnabled = true
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! CustomTableViewCell
        return cell
    }
}

2.CustomTableView

import UIKit

class CustomTableViewCell: UITableViewCell, UITextFieldDelegate {

    @IBOutlet var myLabel: UILabel!
    @IBOutlet var textFieldCell: UITextField!
    @IBOutlet var textFieldCell2: UITextField!
}

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Один из вариантов - использовать делегат.

protocol CustomTableViewCellDelegate  { 
    func editingChanged(_ String: yourString)    
} 

В ячейке табличного представления

class TableViewCell: UITaleViewCell { 
    // declare the delegate 
    var delegate: CustomTableViewCellDelegate? 
    // and pass it like this from where you want to pass 
    delegate?.editingChanged(cookie) 
}

Для использования в tableViewController.сначала присвойте делегату self в ячейке для метода rowpath.Затем внедрите в него делегата.

extension CustomTableViewController: CustomTableViewCellDelegate { 
    func editingChanged(String: yourString) { 
    // use it accordingly 
    } 
} 
0 голосов
/ 26 октября 2018

Поскольку табличное представление содержит только одну ячейку, почему вы вообще используете табличное представление?
И если вам действительно нужно использовать табличное представление, почему бы вам не использовать статическую ячейку?


Простым решением является перемещение кода цели / действия из viewDidLoad в наблюдатель свойства didSet ячейки

var cell: CustomTableViewCell! {
    didSet {
        cell.textFieldCell.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        cell.textFieldCell2.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    self.clickBtn.isEnabled = false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...