UITableView Установка некоторых ячеек как «невыбираемых» - PullRequest
106 голосов
/ 01 мая 2009

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

Ответы [ 15 ]

193 голосов
/ 01 мая 2009

для предотвращения выбора строки

Чтобы полностью предотвратить выбор UITableViewCell, попросите UITableViewDelegate орудие tableView:willSelectRowAtIndexPath:. Из этого метода вы можете вернуть nil, если не хотите, чтобы строка была выбрана.

- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
    // Determine if row is selectable based on the NSIndexPath.

    if (rowIsSelectable) {
        return path;
    }
    return nil;
}

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

Предотвратить выделение строк

Если вы хотите предотвратить визуальное выделение строки при прикосновении, вы можете убедиться, что для ячейки selectionStyle установлено значение UITableViewCellSelectionStyleNone или, предпочтительно, у вас может быть UITableViewDelegate орудие tableView:shouldHighlightRowAtIndexPath: следующим образом:

- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Determine if row is selectable based on the NSIndexPath.

    return rowIsSelectable;
}
151 голосов
/ 01 мая 2009

Установите для свойства ячейки таблицы selectionStyle значение UITableViewCellSelectionStyleNone. Это должно помешать его выделению, и вы также можете проверить это свойство в вашем tableView:didSelectRowAtIndexPath:.

16 голосов
/ 20 августа 2010

используйте это:

cell.selectionStyle = UITableViewCellSelectionStyleNone;
11 голосов
/ 06 августа 2013

Только для iOS 6+.

Вы можете реализовать метод tableView:shouldHighlightRowAtIndexPath: в вашем делегате. Подробнее здесь: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

8 голосов
/ 09 ноября 2010

Набор cell.userInteractionEnabled = NO;

8 голосов
/ 29 декабря 2009

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

self.myTableView.allowsSelection = NO;

Не уверен, была ли это одна строка или все вместе, но в результате я не получаю больше синего выделения или даже синей вспышки. Happy!

5 голосов
/ 05 марта 2014

использование IB также элегантный способ:

enter image description here

3 голосов
/ 08 ноября 2010

Другой способ - добавить пару методов категории к UITableViewCell. Мне нравится этот ответ лучше, чем Себастьян (тоже хороший), потому что, как я строю свой стол. Я думал, что это может быть полезно для кого-то еще.

- (void)setSelectable:(BOOL)enabled {
    [self setSelectionStyle:UITableViewCellSelectionStyleNone];
    [self setUserInteractionEnabled:enabled];
}

- (BOOL)isSelectable {
    BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
                     [self isUserInteractionEnabled];
    return ! disabled;
}
3 голосов
/ 01 мая 2009

Apple говорит, что первое, что вы должны сделать в didSelectRowAtIndexPath, это отменить выбор строки

[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];

Затем вы можете поменять AccessoryType на галочку или не ставить ее и т. Д. Поэтому, когда вы вводите didSelectRowAtIndexPath, вы можете отменить выбор строки, и если она не предназначена для выбора, просто не проверяйте эту строку.

Руководство по программированию в табличном представлении

1 голос
/ 27 марта 2018

Swift 4:
Вы можете предотвратить выделение и выделение, используя UITableViewDelegate: shouldHighlightRowAt

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

func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
    let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
    if cell.isSelectable == false {
        return false
    } else {
        return true
    }
}

Это Swift-версия ответа Себастьяна Селиса на предмет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...