Как я могу связаться с отправителем в функции numberOfRowInSection? - PullRequest
0 голосов
/ 16 октября 2019

Я хочу сделать расширяемую ячейку табличного представления с заголовком. У меня есть модель для моих данных. Я добавил переменную isExpanded bool для определенной ситуации в ячейке, поэтому функция numberOfRowsInSection выдала мне ошибку индекса. У меня есть логика, которая имеет переменную isExpanded, но она не работает правильно. Как я могу это исправить? Вот мой код:

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if section == 0 {
        if self.userAdressDict[0].isExpanded == true {
            return 0
        }
        if self.userAdressDict[0].isExpanded == false {
            return self.userAdressDict.count
        }
    }
    if section == 1 {
        return self.userAdressDictForTeslim.count

    }
    return 1
}

Вот мой код представления заголовка:

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    if section == 0 {
        let button = UIButton(type: .system)
        button.setTitle("Kapat", for: .normal)
        button.setTitleColor(.black, for: .normal)
        button.backgroundColor = .lightGray
        button.titleLabel!.font = UIFont.boldSystemFont(ofSize: 14)
        button.addTarget(self, action: #selector(handleExpandCloseForAlim(sender:)), for: .touchUpInside)
        return button
    }
    if section == 1 {
        let button = UIButton(type: .system)
        button.setTitle("Kapat", for: .normal)
        button.setTitleColor(.black, for: .normal)
        button.backgroundColor = .lightGray
        button.titleLabel!.font = UIFont.boldSystemFont(ofSize: 14)
        button.addTarget(self, action: #selector(handleExpandCloseForTeslim), for: .touchUpInside)
        return button
    }
    else{
        return nil
    }
}

А вот функция действия кнопки:

@objc func handleExpandCloseForAlim(sender: UIButton) {
    var indexPaths = [IndexPath]()
    for row in self.userAdressDict.indices{
        print(0 , row)
        let indexPath = IndexPath(row: row, section: 0)
        indexPaths.append(indexPath)
    }
    let indexPath = IndexPath(row: (sender.tag), section: 0)
    let adresso = self.userAdressDict[indexPath.row]
    if adresso.isExpanded == true {
        tableView.deleteRows(at: indexPaths , with: .fade)
    }
    if adresso.isExpanded == false {
        tableView.insertRows(at: indexPaths, with: .fade)
    }
    //self.userAdressDict.removeAll()

}

Я могу сделать процесс удаления с помощью removeAll() код. Но я хочу вставить строки также, так что это не правильный способ сделать это. (userAdressDict - моя модель, в которой хранятся данные). В handleExpandCloseForAlim отправитель функции для достижения - переменная isExpanded. Наконец, у меня проблема с частью numberOfRowsInSection.

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Используйте guard, чтобы увидеть, есть ли какие-либо элементы в вашем массиве, что-то вроде этого:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if section == 0 {
        guard let element = self.userAdressDict.first as? AdresStruct else { return 0 }

        if element.isExpanded {
            return 0
        }
        else {
            return self.userAdressDict.count
        }
    }

    if section == 1 {
        return self.userAdressDictForTeslim.count
    }

    return 1
}
0 голосов
/ 16 октября 2019

изменить эти строки

if self.userAdressDict[0].isExpanded == false {
            return self.userAdressDict.count
        }
    }
    if section == 1 {
        return self.userAdressDictForTeslim.count

    }

на

if self.userAdressDict[0].isExpanded == false {
            return self.userAdressDict.count - 1
        }
    }
    if section == 1 {
        return self.userAdressDictForTeslim.count - 1

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