2009-03-06 8 views

답변

117

NSTableView에서 -setDoubleAction: 메서드를 살펴보십시오. 당신은 정상적인 target-action 시스템과 마찬가지로 호출 될 메소드로 두 번 클릭 할 수 있습니다.

해당 조치 방법에서 -clickedRow이 유용합니다.

+7

IB를 통해 연결하는 방법이 있습니까? –

+21

또한 setTarget :, 바보 같지만 간과 할 수있는 표보기의 대상을 설정해야합니다. – nduplessis

+1

-setDoubleAction :을 대리자 메소드로 구현해야합니까, 아니면 테이블에 IBOutlet iVar를 만들어야하고 -setDoubleAction :을 호출해야합니까? 아이바? –

55

@JimPuls에 대한 기본 정보를 추가하면 코코아에 대한 새로운 이민자의 혜택을 얻을 수 있습니다.

  1. NSTableView에 대한 IBOutlet은 인터페이스에서 선언해야합니다. 나는 테이블 위임자 (delegate)에서 그렇게하는 것이 바람직하다고 생각했다.
  2. 테이블에 대한 IBOutlet은 Interface Builder를 통해 연결해야합니다. Ctrl-Drag & 아웃렛을 테이블 뷰로 선언 한 클래스에서 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... 
} 

희망이 있습니다.

0

당신은 우선 같은

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

그 펜촉에 도착 구현하는 .m 파일에 .H 파일

-(IBAction)openWindow:(id)sender 

한 mentod를 선언, 바인딩과 같은 일을 할 수있는 당신을 테이블보기를 선택하고 테이블보기를 선택하고 특성 검사기의 두 번째 마지막 탭을 가져옵니다. 여우 선택 파일의 소유자, 모델 키 pat을 확인하기 위해 double cicl 인수 공개 삼각형 검사 바인드를 열면 선택기 이름은 "openWindow : ", 동일한 프로세스가"두 번 클릭 대상 "과 관련됩니다 다시, 이 작동합니다

10

PR 싱이 말했듯이, 당신은 코코아 바인딩을 사용할 수 있습니다, 당신은 또한 selectedObjects 함께 전달할 수 있습니다.이 두 바인딩을 설정 다음과 같이

  1. 는 바인딩 관리자에서 다음 IB에서 테이블보기를 선택 MyMethod라는이

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

    로 구현됩니다

    >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: 
    

이것은 또한 여기에 문서화되어 있습니다 : https://developer.apple.com/library/mac/qa/qa1472/_index.html

+0

매력처럼 작동합니다. – groomsy

6

누군가가 신속한 2.0 버전을 찾는다면 : 이것이 저에게 효과적입니다. Objective C 코드보다 훨씬 쉬워 보입니다.

@IBOutlet weak var searchResultTable: NSTableView! 

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

func doubleClickOnResultRow() 
{ 
    print("doubleClickOnResultRow \(searchResultTable.clickedRow)") 
} 
+0

정말 도움이됩니다. doubleAction에 대해 더 알고 싶다면 [link] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/index.html#//apple_ref)를 확인하십시오./occ/instp/NSTableView/doubleAction). –

+0

Swift 3의 경우 함수 선택기는'searchResultTable.doubleAction = #selector (doubleClickOnResultRow)' –

6

Interface Builder에서 두 번 클릭 동작을 연결할 수 있습니다. Ctrl 키를 누른 상태에서 테이블보기를 클릭하십시오. 테이블보기 (스크롤보기 또는 클립보기 또는 테이블 열이 아니라)가 연결 패널을 가져 오는지 확인하십시오. '보낸 액션'섹션에서 'doubleAction'항목을 찾습니다. IBAction에 연결하십시오.

+0

쉬운 레몬 조각입니다. 테이블 뷰의 clickedRow 메소드에서 클릭 한 행을 가져올 수 있습니다. 응답 번호 2에 설명 된 콘센트가 여전히 필요합니다. –

+0

테이블 뷰는 자체를 동작 메시지의 보낸 사람 인수로 제공하므로 테이블 뷰에 연결된 콘센트가 필요하지 않습니다. –

+0

소원 나는 내 자신의 몸짓 인식기를 굴리기 전에 이것을 보았다. – ghostatron