UITableview: как отключить выбор для некоторых строк, но не других

Я отображаюсь в группе tableview содержание проанализировано от XML. Я хочу отключить событие щелчка на нем (я не должен мочь нажать его вообще), таблица содержит две группы. Я хочу отключить выбор для первой группы только, но не второй группы. Нажатие на первую строку второй группы navigates к моей трубе player view.

Как я могу сделать просто определенные группы или строки можно выбрать?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if(indexPath.section!=0)
    if(indexPath.row==0)    

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:tubeUrl]];   
}

Спасибо.

283
задан P.J.Radadiya 17 March 2016 в 21:56
поделиться

3 ответа

Вам просто нужно поместить этот код в cellForRowAtIndexPath

Чтобы отключить свойство выделения ячейки: (при нажатии на ячейку)

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Чтобы включить возможность выбора (касания) ячейки: (нажатие на ячейку)

// Default style
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

// Gray style
cell.selectionStyle = UITableViewCellSelectionStyleGray;

Обратите внимание, что ячейка с selectionStyle = UITableViewCellSelectionStyleNone; по-прежнему вызовет пользовательский интерфейс didSelectRowAtIndexPath при прикосновении пользователем. Чтобы этого избежать, сделайте, как предложено ниже, и установите.

cell.userInteractionEnabled = NO;

вместо этого. Также обратите внимание, что вы можете установить cell.textLabel.enabled = NO; , чтобы этот элемент был серым.

482
ответ дан 23 November 2019 в 01:52
поделиться

Вы перехватываете выборки с помощью этих методов источника данных.

– tableView:willSelectRowAtIndexPath: 
– tableView:didSelectRowAtIndexPath: 
– tableView:willDeselectRowAtIndexPath: 
– tableView:didDeselectRowAtIndexPath:

В этих методах вы проверяете, является ли выбранная строка той, которую вы хотите выбрать. Если да, примите меры, если нет - ничего не делайте.

К сожалению, вы не можете отключить выделение только для одного раздела. Это вся таблица или ничего.

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

Edit01:

Если у вас есть таблица, в которой можно выбрать только некоторые строки, важно, чтобы ячейки выбираемых строк визуально отличались от невыбираемых строк. По умолчанию это можно сделать с помощью дополнительной кнопки «шеврон».

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

11
ответ дан 23 November 2019 в 01:52
поделиться

Если вы хотите сделать строку (или подмножество строк) невыбираемой, реализуйте UITableViewDelegate метод -tableView:willSelectRowAtIndexPath: (также упомянутый TechZen). Если indexPath не должен быть выбираемым, возвращается nil, иначе возвращается indexPath. Чтобы получить поведение выбора по умолчанию, вы просто возвращаете indexPath, переданный вашему делегату, но вы также можете изменить выбор строки, возвращая другой indexPath.

пример:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // rows in section 0 should not be selectable
    if ( indexPath.section == 0 ) return nil;

    // first 3 rows in any section should not be selectable
    if ( indexPath.row <= 2 ) return nil;

    // By default, allow row to be selected
    return indexPath;
}
355
ответ дан 23 November 2019 в 01:52
поделиться