ユーザーがセルをクリックして待機またはダブルクリックするたびに、ビューベースのテーブルセルからポップオーバーを表示したいと考えています。ダブルクリック部分はダブルクリックアクションで簡単ですが、クリックして待つ方法が見つかりません。テーブルの選択を取得できますが、それがテキスト フィールド (すぐに編集を開始しない) または Xcode のオブジェクト ライブラリである場合と同様にしたいと考えています。
2 に答える
このドキュメントでは、テキスト フィールドの編集開始/終了を通知する方法について説明します。
これらは、それらを処理するために実装する必須のデリゲート メソッドです。
func control(control: NSControl, textShouldBeginEditing fieldEditor: NSText) -> Bool {
return true
}
func control(control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
return true
}
説明
Finderでの名前の変更など、「遅延編集」のようなことを話していると思います。ユーザーがエントリをシングルクリックして少し待つと、すぐに編集可能になります。
私はついにこれがどのように機能するかを理解しました。setDoubleAction:
「遅延編集」は、正式な機能ではなくdouble-action( ) の副作用である可能性が高くなります。ダブルクリック アクションがあるため、テーブル ビューはダブルクリックの間隔を待って、2 回目のクリックが発生するかどうかを判断する必要があります。
そうしないsetDoubleAction:
と、テキスト フィールドで編集がすぐに開始されます。しかし、ダブルアクションを設定することで、遅延させることができます。残りの作業は、編集が開始されたときに通知を受けるだけです。
上記のコードはすべてそのためのものです。これがOS X 10.10で動作することを確認しました。NSButton は遅れているようです。これが役立つことを願っています。
別の解決策
上記の方法がうまくいかない場合は、別の方法があります。
NSTextField
サブクラスを準備します。@interface AAATextField: NSTextField @end @implementation AAATextField - (BOOL)becomeFirstResponder { NSLog(@"%@", @"editing is starting..."); return YES; } @end
NSTableCellView
サブクラスを準備します。@interface BBBTableCellView : NSTableCellView @property(nonatomic,readwrite,strong) NSTextField* exampleTextField; @end @implementation BBBTableCellView @synthesize exampleTextField; - (instancetype)initWithFrame:(NSRect)frameRect { self = [super initWithFrame:frameRect]; if (self) { exampleTextField = [[AAATextField alloc] initWithFrame:CGRectMake(20, 0, 100, 20)]; [self addSubview:exampleTextField]; [self setTextField:exampleTextField]; } return self; } @end
と一緒に使用してください
NStableView
。- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { BBBTableCellView* v = [[BBBTableCellView alloc] init]; v.exampleTextField.stringValue = @"ABCDE"; return v; }
テーブル ビュー デリゲート メソッド tableViewSelectionDidChange: を実装し、そのメソッドで performSelector:withObject:afterDelay: を呼び出して、ポップオーバーを表示する前に必要な遅延を追加できます。