когда я нажимаю кнопку, активную в табличном представлении - PullRequest
0 голосов
/ 14 апреля 2019

Когда я нажимаю кнопку, я хочу запустить функцию tableview cellForRowAt. Но я не хочу вызывать cellForRowAt, когда я не нажимаю кнопку. Потому что функция cellForRowAt работает сразу после открытия приложения. Нажмите кнопку, и если newdevicechipnumber.ishidden == false, я хочу запустить функцию. Я хочу, чтобы эта функция работала, когда я нажимаю кнопку Newdeviceadd.

    class MainTableViewController: UITableViewController {

 let newdeviceadd: UILabel = {

        let topAlignment: SMIconLabel.VerticalPosition = .top

        let labelLeft = SMIconLabel()
        labelLeft.isHidden = true
        labelLeft.text = "Cihazı Ekle"
        labelLeft.font = UIFont(name: "Avenir-Black", size: 23)
        labelLeft.textColor = UIColor.flatWhite
        labelLeft.translatesAutoresizingMaskIntoConstraints = false
        labelLeft.icon = UIImage(named: "homepage")    // Set icon image
        labelLeft.iconPadding = 5                  // Set padding between icon and label
        labelLeft.numberOfLines = 0                // Required
        labelLeft.iconPosition = ( .left, topAlignment )
        labelLeft.textAlignment = .left
        return labelLeft
    }()

    var items: [Device] = []
        var itemsnew: [NewDevice] = []

        let cellId: String = "cellId"

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


            let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! DeviceTableViewCell
            let selectedIndexPaths = tableView.indexPathsForSelectedRows
            let rowIsSelected = selectedIndexPaths != nil && selectedIndexPaths!.contains(indexPath)
            cell.accessoryType = rowIsSelected ? .checkmark : .none

            if newdevicechipnumber.isHidden == false {
                let deviceItemNew: NewDevice = itemsnew[indexPath.row]
                cell.new = deviceItemNew
                cell.titleNew.text = deviceItemNew.title
                cell.title1New.text = deviceItemNew.places
                cell.titlesaatNew.text = deviceItemNew.time
                cell.buttonNew.isOn = deviceItemNew.state
                cell.buttonNew.isHidden = hideBtn
                cell.buttonNew.addTarget(self, action: #selector(refreshDataNew), for: .touchUpInside)

             }

    }

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Вариант 1: Вы можете использовать bool, чтобы вызвать население вашего UITableView.Допустим, мы называем это shouldPopulate, и мы определяем его в верхней части вашего контроллера.

var shouldPopulate: Bool = false

Используйте shouldPopulate, чтобы вызвать правильное количество строк или 0.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return shouldPopulate ? yourNumberOfRows : 0
}

Затем, когда вы нажмете на кнопку, вы определяете от shouldPopulate до true и перезагружаете данные.

@IBAction func buttonTapped(_ sender: Any) {
    self.shouldPopulate = true
    self.tableView.reloadData()
}

Вариант 2: Вы можете использовать UIViewControllerс UITableView внутри, если вы хотите получить конкретное поведение, было бы лучше, чем UITableViewController.

Вместо того, чтобы, например, установить TableView Data Source в viewDidLoad, определите его внутриваша функция действия.

@IBAction func buttonTapped(_ sender: Any) {
    self.tableView.dataSource = self
}

Настройка источника данных должна перезагрузить данные, вам не нужно звонить reloadData()

0 голосов
/ 15 апреля 2019

Один из способов сделать это - сохранить некоторое состояние в вашем ViewController, а затем перевернуть это состояние после нажатия кнопки. Если вы сделаете это, то можете сказать вашей функции numberOfRowsInSection, чтобы она возвращала ноль, если кнопка еще не нажата, и возвращает истинное число, если кнопка была нажата.

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