Пожар метода из статической ячейки в контроллере таблицы.
В моем коде у меня есть таблица со статической ячейкой внутри раскадровки. Я пытаюсь запустить метод при нажатии последней статической ячейки.
Что я должен писать в коде, чтобы это произошло. Как я могу ссылаться на статические ячейки внутри кода без ошибки обхода.
Ответы
Ответ 1
В viewController добавьте:
@property (nonatomic, weak) IBOutlet UITableViewCell *theStaticCell;
Подключите эту розетку к ячейке в раскадровке.
Теперь в tableView:didSelectRowAtIndexPath
метод:
UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
if (theCellClicked == theStaticCell) {
//Do stuff
}
Ответ 2
Со статическими ячейками вы все равно можете реализовать - tableView:didSelectRowAtIndexPath:
и проверить indexPath. Один из подходов состоит в том, что вы определяете конкретный indexPath с помощью #define
и проверяете, является ли выделенная строка на этом indexPath, и если да, вызовите [self myMethod].
Ответ 3
Вот мой прием при смешивании статических и динамических ячеек,
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let staticIndexPath = tableView.indexPathForCell(self.staticCell) where staticIndexPath == indexPath {
// ADD CODE HERE
}
}
это позволяет избежать создания новой ячейки.
Мы все используем для создания ячейки и настраиваем ее в cellForRowAtIndexPath
Ответ 4
После ответа CiNN это версия Swift 3, которая решает проблему.
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let staticIndexPath = tableView.indexPath(for: OUTLET_TO_YOUR_CELL), staticIndexPath == indexPath {
// ADD CODE HERE
}
}
Этот подход позволяет не применять метод cellForRow, особенно если вы используете статические ячейки в раскадровке.