ios - objc - uitableviewcontroller tutorial




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

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

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

cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

// Default style
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

// Gray style
cell.selectionStyle = UITableViewCellSelectionStyleGray;

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

cell.userInteractionEnabled = NO;

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

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

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

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

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

Благодарю.


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

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

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

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

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

Edit01:

Если у вас есть таблица, в которой выбираются только некоторые из строк, важно, чтобы ячейки выбираемых строк визуально отличались от неизбираемых строк. Кнопка аксессуара chevron - это способ по умолчанию.

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


Для Xcode 6.3:

 cell.selectionStyle = UITableViewCellSelectionStyle.None;

Для быстрого:

cell.selectionStyle = .None
cell.userInteractionEnabled = false

Используйте это, чтобы ячейка выглядела так, будто она отключена и не может быть выбрана:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Важно: обратите внимание, что это только свойство стиля и фактически не отключает ячейку. Чтобы сделать это, вам нужно проверить для didSelectRowAtIndexPath: в вашей реализации didSelectRowAtIndexPath: делегирование:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if(cell.selectionStyle == UITableViewCellSelectionStyleNone) {
        return;
    }

    // do your cell selection handling here
}

Мне нравится Брайан Чападос ответить выше. Однако это означает, что вы можете дублировать логику как в cellForRowAtIndexPath, так и в willSelectRowAtIndexPath, которая может легко выйти из синхронизации. Вместо того, чтобы дублировать логику, просто проверьте selectionStyle:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.selectionStyle == UITableViewCellSelectionStyleNone)
        return nil;

    else
        return indexPath;
}

Например, для Swift 4.0 :

cell.isUserInteractionEnabled = false
cell.contentView.alpha = 0.5

Начиная с iOS 6, вы можете использовать

-tableView:shouldHighLightRowAtIndexPath:

Если вы вернете NO , это отключит выделение выделения и расцепированные сценарии, связанные с этой ячейкой.

Метод вызывается, когда прикосновение падает вниз. Возврат NO к этому сообщению приостанавливает процесс выбора и не приводит к тому, что текущая выбранная строка теряет свой выбранный вид, пока прикосновение не работает.

Ссылка на UITableViewDelegate Protocol


Чтобы остановить выбор некоторых выбранных ячеек, используйте:

cell.userInteractionEnabled = NO;

Помимо предотвращения выбора, это также останавливает tableView: didSelectRowAtIndexPath: вызывается для ячеек, которые он установил.


Чтобы отключить выбор ячейки в методе cellForRowAtIndexPath вам нужно сделать что-то вроде следующего:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell setUserInteractionEnabled:NO];

Чтобы показать tableView:WillDisplayCell:forRowAtIndexPath ячейку, поместите следующее в tableView:WillDisplayCell:forRowAtIndexPath :

[cell setAlpha:0.5];

Один из методов позволяет контролировать интерактивность, а другой позволяет вам контролировать внешний вид пользовательского интерфейса.


для swift 3.0 вы можете использовать нижеприведенный код, чтобы отключить взаимодействие пользователя с ячейкой UITableView

 cell.isUserInteractionEnabled = false

на Xcode 7 без кодирования вы можете просто сделать следующее:

В виде схемы выберите «Просмотр таблицы». (Ячейка вложена под сценой контроллера табличного вида> Table View Controller> Table View. Возможно, вам придется раскрыть эти объекты, чтобы увидеть ячейку представления таблицы)

В инспекторе атрибутов найдите поле с надписью «Выбор» и выберите «Нет». инспектор атрибутов. С помощью этой опции ячейка не получит визуального выделения, когда пользователь ее удалит.


ПРОСТО

Просто используйте cell.userInteractionEnabled = YES; в ячейку, если она может перемещаться, а cell.userInteractionEnabled = NO; иначе





uitableview