2014-10-08 1 views
1

Каков наилучший способ предотвратить выбор пользователем ячейки внутри UITableView, но разрешить моей программе вызывать selectRowAtIndexPath: на виде таблицы?Отключить выбор UITableViewCell нажатием, но активировать по вызову метода

Я также хочу, чтобы элементы управления в UITableViewCell оставались интерактивными (т. Е. Разрешать touchesBegan: для вызова в UITableViewCell).

Если я делаю [tableView setAllowsSelection:NO], звонящий selectRowAtIndexPath: ничего не делает.

+0

Установить userInteraction значение Нет для просмотра таблицы, а затем попытаться вызвать selectRowAtIndexPath. –

+0

К сожалению, это не коснется клетки. Он не будет называть 'touchhesBegan:' в ячейке. – golddove

+0

Ohk. Можете ли вы объяснить, почему вы хотите остановить выбор ячейки по умолчанию и предоставить настраиваемый выбор с помощью touchBegan? –

ответ

0

Я понял, что когда вы вызываете selectRowAtIndexPath: программным способом, то метод делегата willSelectRowAtIndexPath: не будет вызван. Однако, если пользователь удаляет ячейку, это будет вызываться. Этот метод может возвращать nil для предотвращения выбора.

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return nil; 
} 

Это гарантирует, что только программные вызовы в selectRowAtIndexPath: будет выбрать строку и все краны, чтобы выбрать строку не будет.

+1

Вы также можете сделать одну вещь, 1. Установить делегат объекта uitableview на ноль по касаниям, и 2. Снова установите делегат на себя, когда касание закончится. – Rupesh

0

Снимите флажок Взаимодействие пользователя не включена в TableView, а также TableViewCell

enter image description here

+0

Элементы управления в 'UITableViewCell' не будут оставаться интерактивными, а' touchhesBegan: 'не будет вызываться на нем. – golddove