Вопрос

В настоящее время я работаю в проекте с nsoutlineview ...

Я использую, конечно, NSCELL (S) и мне нужно позволить возможность выбирать текст внутри ячейки ... или, по крайней мере, ... предотвратить выбор (и выделить) ячейки ...

Я ищу все варианты на IB, но не нашел правильный ...

Есть ли способ, программно или нет, чтобы предотвратить выбор/выделение ячейки, а также позволить пользователю выбирать содержимое ячейки?

Спасибо =)

Это было полезно?

Решение

Это не очень связано с NSCELL, может быть, вы хотите реализовать outlineView:shouldSelectItem: в вашем делегате.

На NSCELL, setEnabled:NO, может помочь тоже. Из документации:

setEnabled:(BOOL)flag

Текст отключенных ячеек изменяется на серый. Если ячейка отключена, она не может быть выделена, не поддерживает отслеживание мышей (и, следовательно, не может участвовать в функциональности цели/действия) и не может быть отредактирована. Тем не менее, вы все равно можете изменить многие атрибуты отключенной ячейки программно. (Например, метод SetState: все еще работает.)

Другие советы

Попробуйте настройку:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Вы также можете попробовать переоценить SelectionIncliprect:, но я не совсем уверен, что это сработает.

Давайте возьмем быстрый пример, например, представление на контур ниже. Есть 3 столбца: firstName, lastName, а также fullName.

enter image description here

В этом конкретном примере скажем, мы хотим только разрешить firstName а также lastName быть редактируемым, пока fullName (что потенциально получено из firstName а также lastName) не является. Вы можете настроить это в интерфейсном строителе, проверив или раскрыв редактируемый флажок для столбца таблицы. Для этого нажмите 3 раза на одном из столбцов таблицы (не заголовок, а внутри контурного представления); Это первое выбирает NSScrollView, тогда NSOutlineView, затем NSTableColumn: enter image description here

Вы бы установили атрибуты, как следующее:

enter image description here

enter image description here

enter image description here

Это обеспечивает начало с установки редактируемого значения по умолчанию для всего столбца. Если вам нужно больше контроля над тем, должно ли значение элемента конкретной строки быть редактируемым или нет, вы можете использовать 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top