Выберите текст (содержимое) вместо ячейки с NSCell
-
24-10-2019 - |
Вопрос
В настоящее время я работаю в проекте с nsoutlineview ...
Я использую, конечно, NSCELL (S) и мне нужно позволить возможность выбирать текст внутри ячейки ... или, по крайней мере, ... предотвратить выбор (и выделить) ячейки ...
Я ищу все варианты на IB, но не нашел правильный ...
Есть ли способ, программно или нет, чтобы предотвратить выбор/выделение ячейки, а также позволить пользователю выбирать содержимое ячейки?
Спасибо =)
Решение
Это не очень связано с NSCELL, может быть, вы хотите реализовать outlineView:shouldSelectItem:
в вашем делегате.
На NSCELL, setEnabled:NO
, может помочь тоже. Из документации:
setEnabled:(BOOL)flag
Текст отключенных ячеек изменяется на серый. Если ячейка отключена, она не может быть выделена, не поддерживает отслеживание мышей (и, следовательно, не может участвовать в функциональности цели/действия) и не может быть отредактирована. Тем не менее, вы все равно можете изменить многие атрибуты отключенной ячейки программно. (Например, метод SetState: все еще работает.)
Другие советы
Попробуйте настройку:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Вы также можете попробовать переоценить SelectionIncliprect:, но я не совсем уверен, что это сработает.
Давайте возьмем быстрый пример, например, представление на контур ниже. Есть 3 столбца: firstName
, lastName
, а также fullName
.
В этом конкретном примере скажем, мы хотим только разрешить firstName
а также lastName
быть редактируемым, пока fullName
(что потенциально получено из firstName
а также lastName
) не является. Вы можете настроить это в интерфейсном строителе, проверив или раскрыв редактируемый флажок для столбца таблицы. Для этого нажмите 3 раза на одном из столбцов таблицы (не заголовок, а внутри контурного представления); Это первое выбирает NSScrollView
, тогда NSOutlineView
, затем NSTableColumn
:
Вы бы установили атрибуты, как следующее:
Это обеспечивает начало с установки редактируемого значения по умолчанию для всего столбца. Если вам нужно больше контроля над тем, должно ли значение элемента конкретной строки быть редактируемым или нет, вы можете использовать outlineView:shouldEditTableColumn:item:
Метод делегата:
#pragma mark -
#pragma mark <NSOutlineViewDelegate>
- (BOOL)outlineView:(NSOutlineView *)anOutlineView
shouldEditTableColumn:(NSTableColumn *)tableColumn
item:(id)item {
if ([[tableColumn identifier] isEqualToString:@"firstName"] ||
[[tableColumn identifier] isEqualToString:@"lastName"]) {
return YES;
} else if ([[tableColumn identifier] isEqualToString:@"fullName"]) {
return NO;
}
return YES;
}
Если вы хотите контролировать, выбирается ли конкретная строка в представлении схемы (например, вы можете предотвратить выбор элемента группы), вы можете использовать outlineView:shouldSelectItem:
.
- (BOOL)outlineView:(NSOutlineView *)anOutlineView shouldSelectItem:(id)item {
// if self knows whether it should be selected
// call its fictional isItemSelectable:method:
if ([self isItemSelectable:item]) {
return YES;
}
/* if the item itself knows know whether it should be selectable
call the item's fictional isSelectable method. Here we
are assuming that all items are of a fictional
MDModelItem class and we cast `item` to (MDModelItem *)
to prevent compiler warning */
if ([(MDModelItem *)item isSelectable]) {
return YES;
}
return NO;
}