私は現在、NSOutlineView を使用してプロジェクトに取り組んでいます...
もちろん、私はNSCellを使用しており、セル内のテキストを選択できるようにする必要があります...または少なくとも...セルの選択(および強調表示)を防止します...
IB ですべてのオプションを検索しましたが、適切なオプションが見つかりません...
セルの選択/強調表示を防止したり、ユーザーにセルの内容を選択させたりする方法はありますか?
ありがとう =)
私は現在、NSOutlineView を使用してプロジェクトに取り組んでいます...
もちろん、私はNSCellを使用しており、セル内のテキストを選択できるようにする必要があります...または少なくとも...セルの選択(および強調表示)を防止します...
IB ですべてのオプションを検索しましたが、適切なオプションが見つかりません...
セルの選択/強調表示を防止したり、ユーザーにセルの内容を選択させたりする方法はありますか?
ありがとう =)
これは NSCell とはあまり関係ありませんoutlineView:shouldSelectItem:
。デリゲートに実装しようとしているのかもしれません。
NSCell ではsetEnabled:NO
、 も役立つ場合があります。ドキュメントから:
setEnabled:(BOOL)flag
無効なセルのテキストは灰色に変わります。セルが無効になっている場合、そのセルは強調表示できず、マウス トラッキングをサポートせず (したがって、ターゲット/アクション機能に参加できません)、編集できません。ただし、無効なセルの多くの属性をプログラムで変更することはできます。(たとえば、setState: メソッドは引き続き機能します。)
設定してみてください:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
HighlightSelectionInClipRect:をオーバーライドすることもできますが、これが機能するかどうかは完全にはわかりません。
以下のアウトライン ビューのような簡単な例を見てみましょう。firstName
、lastName
、 の3 つの列がありますfullName
。
この特定の例では、 and のみを許可firstName
し、 ( andから派生する可能性がある) は許可しないとlastName
します。テーブル列の編集可能なチェックボックスをオンまたはオフにすることで、Interface Builder でこれを設定できます。これを行うには、テーブルの列の 1 つ (ヘッダーではなく、アウトライン ビュー内) を 3 回クリックします。これは最初に を選択し、次にを選択し、次に:
fullName
firstName
lastName
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;
}