tableView:willSelectRowAtIndexPath:
отправляется делегату табличного представления, когда собирается выбрать строку. Ваш делегат может изменить выбор или полностью отменить его, вернув объект NSIndexPath
для альтернативного выбора или nil
, чтобы ничего не выбирать.
Следовательно, если вы хотите запретить выбор определенных строк, используйте tableView:t willSelectRowAtIndexPath:p
, проверьте p
, и если вы не хотите, чтобы это было выбрано, просто верните nil
. Если вы отмените выбор таким образом, tableView:didSelectRowAtIndexPath:
никогда не будет вызван.
Не "отменяйте" вещи внутри didXXYY
методов типа, если у вас есть возможность сделать это в willXXYY
. did
означает, что выбор был зафиксирован; UIKit, возможно, отображал это, другие слушатели событий могли ответить, и т.д. Это может легко привести к странному поведению.