ios abort didSelectRowAtIndexPath - PullRequest
       2

ios abort didSelectRowAtIndexPath

1 голос
/ 16 января 2012

Я хочу прервать этот метод, когда определенное условие не выполняется, как мне это сделать?

Я не использую tableView: willSelectRowAtIndexPath: метод.Я думаю, что можно объединить эти два метода, чтобы предотвратить выделение определенных строк и их перемещение в другой ViewController?


РЕДАКТИРОВАТЬ:

Ребята, большое спасибо.

Теперь этот код работает отлично:

- (NSIndexPath*)tableView:(UITableView *)tableView1 willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger totalcount = [totalarr count]; //totalarr is a global mutable array.

    NSIndexPath *rowToSelect = indexPath;

    if (totalcount == 0)
    {
        rowToSelect = nil;
    }
    return rowToSelect;

}

Ответы [ 2 ]

3 голосов
/ 16 января 2012

tableView:willSelectRowAtIndexPath: отправляется делегату табличного представления, когда собирается выбрать строку. Ваш делегат может изменить выбор или полностью отменить его, вернув объект NSIndexPath для альтернативного выбора или nil, чтобы ничего не выбирать.

Следовательно, если вы хотите запретить выбор определенных строк, используйте tableView:t willSelectRowAtIndexPath:p, проверьте p, и если вы не хотите, чтобы это было выбрано, просто верните nil. Если вы отмените выбор таким образом, tableView:didSelectRowAtIndexPath: никогда не будет вызван.

Не "отменяйте" вещи внутри didXXYY методов типа, если у вас есть возможность сделать это в willXXYY. did означает, что выбор был зафиксирован; UIKit, возможно, отображал это, другие слушатели событий могли ответить, и т.д. Это может легко привести к странному поведению.

2 голосов
/ 16 января 2012

Как вы упомянули, реализуйте tableView:willSelectRowAtIndexPath:.Верните указанный путь индекса, если вы хотите, чтобы строка была выбираемой, и в противном случае верните nil.

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