У меня есть этот метод, который используется в базовом классе 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.