Подтвердить что ты не робот

Пожар метода из статической ячейки в контроллере таблицы.

В моем коде у меня есть таблица со статической ячейкой внутри раскадровки. Я пытаюсь запустить метод при нажатии последней статической ячейки.

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

4b9b3361

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