it-swarm.com.ru

Запустить метод из статической ячейки в контроллере табличного представления

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

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

24
carbonr

В viewController добавьте:

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

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

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

UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
if (theCellClicked == theStaticCell) {
    //Do stuff
}
76
Gobot

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

9
Canopus

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

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

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

3
CiNN

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

0
mourodrigo

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

0
Raimondo Previdi