0

私は現在、NSOutlineView を使用してプロジェクトに取り組んでいます...

もちろん、私はNSCellを使用しており、セル内のテキストを選択できるようにする必要があります...または少なくとも...セルの選択(および強調表示)を防止します...

IB ですべてのオプションを検索しましたが、適切なオプションが見つかりません...

セルの選択/強調表示を防止したり、ユーザーにセルの内容を選択させたりする方法はありますか?

ありがとう =)

4

3 に答える 3

2

これは NSCell とはあまり関係ありませんoutlineView:shouldSelectItem:。デリゲートに実装しようとしているのかもしれません。

NSCell ではsetEnabled:NO、 も役立つ場合があります。ドキュメントから:

setEnabled:(BOOL)flag

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

于 2011-01-26T18:59:04.127 に答える
0

設定してみてください:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

于 2011-01-26T19:00:45.693 に答える
0

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

ここに画像の説明を入力

この特定の例では、 and のみを許可firstNameし、 ( andから派生する可能性がある) は許可しないとlastNameします。テーブル列の編集可能なチェックボックスをオンまたはオフにすることで、Interface Builder でこれを設定できます。これを行うには、テーブルの列の 1 つ (ヘッダーではなく、アウトライン ビュー内) を 3 回クリックします。これは最初に を選択し、次にを選択し、次に: fullNamefirstNamelastNameNSScrollViewNSOutlineViewNSTableColumnここに画像の説明を入力

次のような属性を設定します。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

これにより、列全体にデフォルトの編集可能な値を設定することから始めます。特定の行の項目値を編集可能にするかどうかをさらに制御する必要がある場合は、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;
}
于 2011-01-26T21:26:48.770 に答える