Установка значений для пользовательской ячейки таблицы UILabels в tableView (: didSelectRowAt) - PullRequest
0 голосов
/ 08 марта 2020

У меня есть этот метод, который используется в базовом классе UIViewController, который использует табличное представление с динамическими c прототипами и 1 ячейкой прототипа и стилем правой детализации:

func tableView(_ homeworkTable: UITableView, didSelectRowAt indexPath: IndexPath) {
     homeworkTable.deselectRow(at: indexPath, animated: true)
     if let cell = homeworkTable.cellForRow(at: indexPath) {
        if cell.detailTextLabel?.text == "" {
           let homeworkWord = homeworkWords[indexPath.row]
           if homeworkWord.isEmpty == false {
              let split = homeworkWord.components(separatedBy: "::")
              cell.detailTextLabel?.text = split[1]
           }
        } else {
          cell.detailTextLabel?.text = ""
        }
     }

     let now: TimeInterval = Date().timeIntervalSince1970
     if (now - lastClick < 0.3) && (lastIndexPath?.row == indexPath.row ) {
        self.scrollToTop()
     }
     lastClick = now
     lastIndexPath = indexPath as NSIndexPath
}

У меня есть другой UIViewController, который использует пользовательскую ячейку таблицы в файле XIB. Имеет кнопку и 2 UILabels. У меня все работает для кнопки и UILabel, которая занимает первую левую сторону ячейки. Однако строка, которая работала описанным выше способом в первом контроллере представления, при использовании в didSelectRowAt в контроллере представления с пользовательской ячейкой:

если let cell = tableView.cellForRow (at: indexPath)

не позволяет мне использовать что-то вроде:

cell.foreignWord.text = split [1]

для пользовательской ячейки, где foreignWord - вторая UILabel в пользовательская ячейка.

Я получаю сообщение об ошибке:

У UITabelViewCell нет члена 'foreignWord'.

У меня зарегистрирован перо, зарегистрированное в tableView, и все обычные настройки. Я знаю разницу между двумя viewControllers в том, что один использует прототипы ячеек и другие пользовательские ячейки XIB, поэтому я думаю, что есть другой подход к созданию экземпляра ссылки на ячейку в методе, который не передает параметр ячейки, поэтому я может присваивать строковые текстовые значения UILabel.

1 Ответ

1 голос
/ 08 марта 2020

cellForRow(at возвращает базовый класс UITableViewCell (ошибка ясно говорит вам об этом), с пользовательской ячейкой вы должны условно уменьшить тип

if let cell = tableView.cellForRow(at: indexPath) as? MyCustomCell { ...
...