Настройте текст UITableViewCell внутри оператора защиты - PullRequest
0 голосов
/ 21 марта 2020

У меня есть табличное представление, которое считывает информацию из массива массивов и отображает ее. В табличном представлении есть складные ячейки для подкатегорий. Кажется, я не могу понять, как заставить мой текст TableView соответствовать ячейке прототипа, которую я создал. Я создал файл .swift для ячейки с именем «autoClaimCell», идентификатором ячейки также является «autoClaimCell», а метка внутри этой ячейки называется «autoClaimCellLabel». До того, как я сделал оператор охраны, он работал нормально, потому что позволил бы мне поместить «as! AutoClaimCell» в конец оператора, который затем получил доступ к этому файлу для метки, но теперь, так как у меня есть оператор охраны, он не будет позвольте мне разместить "as! autoClaimCell" где-нибудь там.

Вот мой код:

    func numberOfSections(in tableView: UITableView) -> Int {
        return tableViewData.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableViewData[section].opened == true {
            return tableViewData[section].sectionData.count + 1
        } else {
            return 1
        }
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        let cell = tableView.dequeueReusableCell(withIdentifier: "autoClaimCell", for: indexPath) as! autoClaimCell
//        cell.autoClaimCellLabel?.text = areaCategories[indexPath.row]
//        return cell
        let dataIndex = indexPath.row - 1

        if indexPath.row == 0 {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "autoClaimCell") else {return UITableViewCell()}
            cell.textLabel?.text = tableViewData[indexPath.section].title
            return cell
        } else {
            //Use different call indentifier if needed
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "autoClaimCell") else {return UITableViewCell()}
            cell.textLabel?.text = tableViewData[indexPath.section].sectionData[dataIndex]
            return cell
        }

    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            if indexPath.row == 0 {

            if tableViewData[indexPath.section].opened == true {
                tableViewData[indexPath.section].opened = false
                let sections = IndexSet.init(integer: indexPath.section)
                tableView.reloadSections(sections, with: .none) // play around with animations
            } else {
                tableViewData[indexPath.section].opened = true
                let sections = IndexSet.init(integer: indexPath.section)
                tableView.reloadSections(sections, with: .none) // play around with animations
            }
        }
    }

Кроме того, как бы мне сделать список, который отображается при расширении ячейки, в соответствии с другой прототип клетки в процессе?

1 Ответ

0 голосов
/ 21 марта 2020

Выражение в выражении guard-let должно быть необязательным. Используя как! принудительно развернет необязательный параметр, который либо завершится успешно, либо создаст ошибку, но никогда не вернет необязательный Просто замените как! с as?

Что касается соответствия другому прототипу ячейки. Вы должны управлять этим с помощью вашей модели данных. У вас уже есть разные условия для строки индекса 0. Вы можете добавить условия для расширения или тому подобное.

...