사용자가 NSTableView
의 행을 두 번 클릭 할 때 창을 열려면 응용 프로그램이 필요합니다. 이 작업을 수행하는 방법에 대한 정보 나 예제를 찾는 데 어려움을 겪고 있습니다. 아무도 올바른 방향으로 나를 가리킬 수 있습니까?코코아에서 NSTableView 행을 더블 클릭 하시겠습니까?
답변
NSTableView에서 -setDoubleAction:
메서드를 살펴보십시오. 당신은 정상적인 target-action 시스템과 마찬가지로 호출 될 메소드로 두 번 클릭 할 수 있습니다.
해당 조치 방법에서 -clickedRow
이 유용합니다.
@JimPuls에 대한 기본 정보를 추가하면 코코아에 대한 새로운 이민자의 혜택을 얻을 수 있습니다.
- NSTableView에 대한 IBOutlet은 인터페이스에서 선언해야합니다. 나는 테이블 위임자 (delegate)에서 그렇게하는 것이 바람직하다고 생각했다.
- 테이블에 대한 IBOutlet은 Interface Builder를 통해 연결해야합니다. Ctrl-Drag & 아웃렛을 테이블 뷰로 선언 한 클래스에서 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...
}
희망이 있습니다.
당신은 우선 같은
-(IBAction)openWindow:(id)sender
{
//do something here;
}
그 펜촉에 도착 구현하는 .m 파일에 .H 파일
-(IBAction)openWindow:(id)sender
한 mentod를 선언, 바인딩과 같은 일을 할 수있는 당신을 테이블보기를 선택하고 테이블보기를 선택하고 특성 검사기의 두 번째 마지막 탭을 가져옵니다. 여우 선택 파일의 소유자, 모델 키 pat을 확인하기 위해 double cicl 인수 공개 삼각형 검사 바인드를 열면 선택기 이름은 "openWindow : ", 동일한 프로세스가"두 번 클릭 대상 "과 관련됩니다 다시, 이 작동합니다
PR 싱이 말했듯이, 당신은 코코아 바인딩을 사용할 수 있습니다, 당신은 또한 selectedObjects 함께 전달할 수 있습니다.이 두 바인딩을 설정 다음과 같이
- 는 바인딩 관리자에서 다음 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
매력처럼 작동합니다. – groomsy
누군가가 신속한 2.0 버전을 찾는다면 : 이것이 저에게 효과적입니다. Objective C 코드보다 훨씬 쉬워 보입니다.
@IBOutlet weak var searchResultTable: NSTableView!
override func viewDidLoad() {
super.viewDidLoad()
searchResultTable.doubleAction = "doubleClickOnResultRow"
}
func doubleClickOnResultRow()
{
print("doubleClickOnResultRow \(searchResultTable.clickedRow)")
}
정말 도움이됩니다. doubleAction에 대해 더 알고 싶다면 [link] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/index.html#//apple_ref)를 확인하십시오./occ/instp/NSTableView/doubleAction). –
Swift 3의 경우 함수 선택기는'searchResultTable.doubleAction = #selector (doubleClickOnResultRow)' –
Interface Builder에서 두 번 클릭 동작을 연결할 수 있습니다. Ctrl 키를 누른 상태에서 테이블보기를 클릭하십시오. 테이블보기 (스크롤보기 또는 클립보기 또는 테이블 열이 아니라)가 연결 패널을 가져 오는지 확인하십시오. '보낸 액션'섹션에서 'doubleAction'항목을 찾습니다. IBAction에 연결하십시오.
쉬운 레몬 조각입니다. 테이블 뷰의 clickedRow 메소드에서 클릭 한 행을 가져올 수 있습니다. 응답 번호 2에 설명 된 콘센트가 여전히 필요합니다. –
테이블 뷰는 자체를 동작 메시지의 보낸 사람 인수로 제공하므로 테이블 뷰에 연결된 콘센트가 필요하지 않습니다. –
소원 나는 내 자신의 몸짓 인식기를 굴리기 전에 이것을 보았다. – ghostatron
IB를 통해 연결하는 방법이 있습니까? –
또한 setTarget :, 바보 같지만 간과 할 수있는 표보기의 대상을 설정해야합니다. – nduplessis
-setDoubleAction :을 대리자 메소드로 구현해야합니까, 아니면 테이블에 IBOutlet iVar를 만들어야하고 -setDoubleAction :을 호출해야합니까? 아이바? –