ユーザーがの行をダブルクリックしたときにウィンドウを開くには、アプリケーションが必要ですNSTableView
。これを達成する方法についての情報や例を見つけるのに少し苦労しています。誰かが私を正しい方向に向けることができますか?
8 に答える
-setDoubleAction:
NSTableViewのメソッドを見てください。これを、通常のターゲット アクション システムと同じようにダブルクリックで呼び出されるメソッドに設定できます。
そのアクションメソッドで-clickedRow
は、役に立ちます。
他のCocoaの新規参入者の利益のために、@JimPulsの回答にさらに基本的な情報を追加します。
- NSTableViewへのIBOutletは、インターフェイスで宣言する必要があります。私は、テーブルのデリゲートでそうすることが好ましいと思いました。
- テーブルへのIBOutletは、InterfaceBuilderを介して接続する必要があります。これを行うには、Ctrlキーを押しながら、テーブルビューへのアウトレットを宣言するクラスからIBをドラッグアンドドロップします。マウスを離すと、手順1で宣言したアウトレットの名前を示すポップアップが表示されます。それを選択します。
- @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...
}
お役に立てれば。
誰かがSwift 2.0バージョンを探している場合: これは私にとってうまくいくものです. Objective C コードよりもはるかに簡単に思えます。
@IBOutlet weak var searchResultTable: NSTableView!
override func viewDidLoad() {
super.viewDidLoad()
searchResultTable.doubleAction = "doubleClickOnResultRow"
}
func doubleClickOnResultRow()
{
print("doubleClickOnResultRow \(searchResultTable.clickedRow)")
}
PR Singh が言ったように、cocoa バインディングを使用でき、selectedObjects を渡すこともできます。
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
Interface Builder でダブルクリック アクションを関連付けることができます。テーブル ビューを Control キーを押しながらクリックして (スクロール ビュー、クリップ ビュー、またはテーブル列ではなく、テーブル ビューを取得していることを確認してください)、その接続パネルを取得します。「Sent Actions」セクションで「doubleAction」項目を見つけます。選択した IBAction に接続します。
バインディングでも同じことができます。まず、.h ファイルで 1 つのmentod を宣言します。
-(IBAction)openWindow:(id)sender
.m ファイルで同じものを実装します
-(IBAction)openWindow:(id)sender
{
//do something here;
}
テーブルビューが存在するペン先に移動し、テーブルビューを選択し、属性インスペクター(バインディング)の最後の2番目のタブを取得し、double click argument
開示三角形を開き、チェックボックスにバインドしてファイルの所有者を選択し、モデルキーパスは「self」である必要があります、セレクター名前は「openWindow:」になります。「ダブルクリック ターゲット」の開示と同じプロセスを行います。これは機能します。