0

ユーザーがセルをクリックして待機またはダブルクリックするたびに、ビューベースのテーブルセルからポップオーバーを表示したいと考えています。ダブルクリック部分はダブルクリックアクションで簡単ですが、クリックして待つ方法が見つかりません。テーブルの選択を取得できますが、それがテキスト フィールド (すぐに編集を開始しない) または Xcode のオブジェクト ライブラリである場合と同様にしたいと考えています。

4

2 に答える 2

0

このドキュメントでは、テキスト フィールドの編集開始/終了を通知する方法について説明します。

これらは、それらを処理するために実装する必須のデリゲート メソッドです。

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;
    }
    
于 2015-01-11T12:27:33.457 に答える
0

テーブル ビュー デリゲート メソッド tableViewSelectionDidChange: を実装し、そのメソッドで performSelector:withObject:afterDelay: を呼び出して、ポップオーバーを表示する前に必要な遅延を追加できます。

于 2012-08-06T06:35:02.890 に答える