nscellを使用してセルの代わりにテキスト(コンテンツ)を選択します
-
24-10-2019 - |
質問
私は現在、nsoutlineViewを使用してプロジェクトで働いています...
もちろん、私はnscellを使用していますが、セル内のテキストを選択する能力を許可する必要があります...または、少なくとも...セルの選択(およびハイライト)を防止する必要があります...
IBのすべてのオプションを検索しますが、正しいものを見つけることができません...
セルの選択/ハイライトを防止したり、ユーザーにセルのコンテンツを選択させたりする方法はありますか?
ありがとう=)
解決
それはあまりnscell関連ではありません、多分あなたは実装を探しています outlineView:shouldSelectItem:
あなたの代表者。
nscellで、 setEnabled:NO
, 、助けになるかもしれません。ドキュメントから:
setEnabled:(BOOL)flag
無効な細胞のテキストは灰色に変更されます。セルが無効になっている場合、強調表示できず、マウスの追跡をサポートせず(したがってターゲット/アクション機能に参加できません)、編集できません。ただし、障害細胞の多くの属性をプログラムで変更することもできます。 (SetState:メソッド、たとえば、まだ機能します。)
他のヒント
設定を試してください:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
また、HighlightSelectionInclipRect:をオーバーライドすることもできますが、これが機能するかどうかは完全にはわかりません。
以下のアウトラインビューのような簡単な例を見てみましょう。 3つの列があります: firstName
, lastName
, 、 と fullName
.
この特定の例では、許可したいとしましょう firstName
と lastName
編集できる間 fullName
(潜在的に導出されています firstName
と lastName
) ではありません。テーブル列の編集可能なチェックボックスをチェックまたはチェックすることにより、インターフェイスビルダーにこれを設定できます。それを行うには、テーブル列のいずれかを3回クリックします(ヘッダーではなく、アウトラインビュー内の内側)。これは最初に選択します 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;
}