Выделите текст (содержимое) вместо ячейки с помощью NSCell - PullRequest
0 голосов
/ 26 января 2011

Я сейчас работаю в проекте с NSOutlineView ...

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

Я ищу все варианты на IB, но не могу найти подходящий ...

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

Спасибо =)

Ответы [ 3 ]

2 голосов
/ 26 января 2011

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

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

setEnabled:(BOOL)flag

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

0 голосов
/ 27 января 2011

Давайте рассмотрим краткий пример, подобный приведенному ниже. Есть 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;
}
0 голосов
/ 26 января 2011

Попробуйте установить:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

...