75

ユーザーがの行をダブルクリックしたときにウィンドウを開くには、アプリケーションが必要ですNSTableView。これを達成する方法についての情報や例を見つけるのに少し苦労しています。誰かが私を正しい方向に向けることができますか?

4

8 に答える 8

138

-setDoubleAction:NSTableViewのメソッドを見てください。これを、通常のターゲット アクション システムと同じようにダブルクリックで呼び出されるメソッドに設定できます。

そのアクションメソッドで-clickedRowは、役に立ちます。

于 2009-03-06T22:18:18.693 に答える
56

他のCocoaの新規参入者の利益のために、@JimPulsの回答にさらに基本的な情報を追加します。

  1. NSTableViewへのIBOutletは、インターフェイスで宣言する必要があります。私は、テーブルのデリゲートでそうすることが好ましいと思いました。
  2. テーブルへのIBOutletは、InterfaceBuilderを介して接続する必要があります。これを行うには、Ctrlキーを押しながら、テーブルビューへのアウトレットを宣言するクラスからIBをドラッグアンドドロップします。マウスを離すと、手順1で宣言したアウトレットの名前を示すポップアップが表示されます。それを選択します。
  3. @implementationセクションの-awakeFromNibメソッドで、ステップ#1で宣言されステップ#2で接続されたIBOutletで-setTarget:および-setDoubleAction:を呼び出します。

これが私のテーブルビューデリゲートからの抜粋です。デリゲートもデータソースとして設定しているので、NSTableViewDelegateインターフェイスとNSTabeViewDataSourceインターフェイスの両方が関連付けられているのがわかります。

//インターフェースの抜粋。

@interface MyTableViewDelegate : NSObject <NSTableViewDelegate, NSTableViewDataSource>
{
  // This iVar needs to be connected to the table view via the IB.
  IBOutlet NSTableView *tableOutlet;
}

@property (assign) IBOutlet NSTableView *tableOutlet;

- (void)doubleClick:(id)nid;

@end

//実装の抜粋。

@implementation MyTableViewDelegate

@synthesize tableOutlet = _tableOutlet;

- (void)awakeFromNib {
  [_tableOutlet setTarget:self];
  [_tableOutlet setDoubleAction:@selector(doubleClick:)];
}

- (void)doubleClick:(id)object {
  // This gets called after following steps 1-3.
  NSInteger rowNumber = [_tableOutlet clickedRow];
  // Do something...
}

お役に立てれば。

于 2011-12-04T22:14:57.497 に答える
12

誰かがSwift 2.0バージョンを探している場合: これは私にとってうまくいくものです. Objective C コードよりもはるかに簡単に思えます。

@IBOutlet weak var searchResultTable: NSTableView!

override func viewDidLoad() {
    super.viewDidLoad()
    searchResultTable.doubleAction = "doubleClickOnResultRow"
}

func doubleClickOnResultRow()
{
    print("doubleClickOnResultRow \(searchResultTable.clickedRow)")
}
于 2015-09-22T20:28:27.853 に答える
10

PR Singh が言ったように、cocoa バインディングを使用でき、selectedObjects を渡すこともできます。

  1. IB でテーブル ビューを選択し、Bindings インスペクターでこれら 2 つのバインディングを次のように設定します。

    >Double Click Target
    
    bind to = Application delegate object (or file owner)
    model key path = self
    selector name = myMethod:
    
    >Double Click Argument
    
    bind to = array controller
    controller key = selectedObjects
    selector name = myMethod:
    

myMethod が実装されている場所

- (void)myMethod:(NSArray*)selectedObjects
{
    NSLog(@"%@", selectedObjects);
}

これはここにも文書化されています: https://developer.apple.com/library/mac/qa/qa1472/_index.html

于 2014-03-25T14:17:27.627 に答える
8

Interface Builder でダブルクリック アクションを関連付けることができます。テーブル ビューを Control キーを押しながらクリックして (スクロール ビュー、クリップ ビュー、またはテーブル列ではなく、テーブル ビューを取得していることを確認してください)、その接続パネルを取得します。「Sent Actions」セクションで「doubleAction」項目を見つけます。選択した IBAction に接続します。

于 2015-11-11T06:10:27.030 に答える
1

バインディングでも同じことができます。まず、.h ファイルで 1 つのmentod を宣言します。

-(IBAction)openWindow:(id)sender

.m ファイルで同じものを実装します

-(IBAction)openWindow:(id)sender
{
    //do something here;
}

テーブルビューが存在するペン先に移動し、テーブルビューを選択し、属性インスペクター(バインディング)の最後の2番目のタブを取得し、double click argument開示三角形を開き、チェックボックスにバインドしてファイルの所有者を選択し、モデルキーパスは「self」である必要があります、セレクター名前は「openWindow:」になります。「ダブルクリック ターゲット」の開示と同じプロセスを行います。これは機能します。

于 2013-09-23T12:59:52.087 に答える