Запустить метод из статической ячейки в контроллере табличного представления - PullRequest
25 голосов
/ 14 марта 2012

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

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

Ответы [ 5 ]

77 голосов
/ 14 марта 2012

В viewController добавьте:

@property (nonatomic, weak) IBOutlet UITableViewCell *theStaticCell;  

Подключите эту розетку к ячейке в раскадровке.

Теперь в tableView:didSelectRowAtIndexPath метод:

UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
if (theCellClicked == theStaticCell) {
    //Do stuff
}
9 голосов
/ 14 марта 2012

Со статическими ячейками вы все еще можете реализовать - tableView:didSelectRowAtIndexPath: и проверить indexPath.Один из подходов состоит в том, что вы определяете конкретный indexPath с помощью #define и проверяете, находится ли выбранная строка в этом indexPath, и если да, вызываете [self myMethod].

3 голосов
/ 11 января 2016

Вот мой дубль при смешивании статических и динамических ячеек,

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
                    if let staticIndexPath = tableView.indexPathForCell(self.staticCell) where staticIndexPath == indexPath {
// ADD CODE HERE 
                }
        }

это позволяет избежать создания новой ячейки. Мы все используем, чтобы создать ячейку и настроить ее в cellForRowAtIndexPath

0 голосов
/ 21 июля 2018

Я думаю, у вас была та же проблема, что и у меня.Я получал сообщение об ошибке при переопределении tableView:didSelectRowAt, и причина была в том, что я привык просто вызывать super.tableView:didSelectRowAt, но в этом случае мы не хотим этого делать.Поэтому просто удалите вызов метода суперкласса , чтобы избежать ошибки времени выполнения.

0 голосов
/ 18 июля 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...