質問

私は現在、nsoutlineViewを使用してプロジェクトで働いています...

もちろん、私はnscellを使用していますが、セル内のテキストを選択する能力を許可する必要があります...または、少なくとも...セルの選択(およびハイライト)を防止する必要があります...

IBのすべてのオプションを検索しますが、正しいものを見つけることができません...

セルの選択/ハイライトを防止したり、ユーザーにセルのコンテンツを選択させたりする方法はありますか?

ありがとう=)

役に立ちましたか?

解決

それはあまりnscell関連ではありません、多分あなたは実装を探しています outlineView:shouldSelectItem: あなたの代表者。

nscellで、 setEnabled:NO, 、助けになるかもしれません。ドキュメントから:

setEnabled:(BOOL)flag

無効な細胞のテキストは灰色に変更されます。セルが無効になっている場合、強調表示できず、マウスの追跡をサポートせず(したがってターゲット/アクション機能に参加できません)、編集できません。ただし、障害細胞の多くの属性をプログラムで変更することもできます。 (SetState:メソッド、たとえば、まだ機能します。)

他のヒント

設定を試してください:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

また、HighlightSelectionInclipRect:をオーバーライドすることもできますが、これが機能するかどうかは完全にはわかりません。

以下のアウトラインビューのような簡単な例を見てみましょう。 3つの列があります: firstName, lastName, 、 と fullName.

enter image description here

この特定の例では、許可したいとしましょう firstNamelastName 編集できる間 fullName (潜在的に導出されています firstNamelastName) ではありません。テーブル列の編集可能なチェックボックスをチェックまたはチェックすることにより、インターフェイスビルダーにこれを設定できます。それを行うには、テーブル列のいずれかを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