2012-01-16 3 views
1

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

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


EDIT:

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

Сейчас этот код работает отлично:

- (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; 

} 

ответ

3

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

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

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

+0

Спасибо за быстрый ответ. Я решил свою проблему :) – wagashi

2

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

+0

Спасибо за вашу помощь, я ценю это. – wagashi

Смежные вопросы