NSOutlineView에서 행을 마우스 오른쪽 버튼으로 클릭하는 기능을 추가하여 객체 또는 다른 작업을 삭제할 수 있습니다. (예 : 애플 메일 응용 프로그램에서 폴더를 마우스 오른쪽 버튼으로 클릭 할 때)NSOutlineView에 컨텍스트 센스티브 메뉴를 추가 하시겠습니까? (예 : 마우스 오른쪽 버튼 클릭 메뉴)
나는 반쪽 편이라고 생각합니다. NSOutlineView의 하위 클래스가있어서 마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴를 표시 할 수 있습니다. 마우스가 클릭하고있는 행이 아닌 선택된 행
@implementation NSContextOutlineView
- (NSMenu *)defaultMenu {
if([self selectedRow] < 0) return nil;
NSMenu *theMenu = [[[NSMenu alloc] initWithTitle:@"Model browser context menu"] autorelease];
[theMenu insertItemWithTitle:@"Add package" action:@selector(addSite:) keyEquivalent:@"" atIndex:0];
NSString* deleteItem = [NSString stringWithFormat: @"Remove '%i'", [self selectedRow]];
[theMenu insertItemWithTitle: deleteItem action:@selector(removeSite:) keyEquivalent:@"" atIndex:1];
return theMenu;
}
- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
return [self defaultMenu];
}
@end
죄송합니다. 답변이 분명하면 온라인이나 설명서에서 도움을 얻을 수 없습니다.
감사는이를 사용하여 저를 인도, 답변을 무효합니다 :
- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
NSPoint pt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
id item = [self itemAtRow: [self rowAtPoint:pt]];
return [self defaultMenuFor: item];
}
실행하지 않으면 정상적으로 작동하는 것 같습니다. 그렇지 않습니까? 그렇지 않다면 어떤 문제가 있습니까? –
또한 자신의 클래스에 NS 접두어를 사용하지 마십시오. Apple이 NSContextOutlineView 클래스를 향후 버전의 Cocoa에 추가하면 클래스와 클래스가 충돌하여 앱이 실행되지 않을 것입니다. –
게시 된 코드의 문제는 selectedRow를 사용하고 오른쪽/Ctrl + 클릭을 수행 한 행을 사용하지 않는다고 생각합니다. 그것은 선택된 행일 수도 그렇지 않을 수도 있습니다. – VoidPointer