Làm cách nào để bạn thêm khả năng nhấp chuột phải vào một hàng trong NSOutlineView để bạn có thể nói xóa đối tượng hoặc một số hoạt động khác. (ví dụ như khi bạn nhấp chuột phải vào một thư mục trong ứng dụng Apple Mail)Làm cách nào để thêm menu senstive ngữ cảnh vào NSOutlineView (tức là menu chuột phải)
Tôi nghĩ rằng tôi ở một nửa, tôi có một lớp con của NSOutlineView cho phép tôi nắm bắt nhấp chuột phải và hiển thị menu ngữ cảnh dựa trên hàng đã chọn thay vì hàng mà chuột đang nhấp vào.
@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
Xin lỗi nếu câu trả lời là hiển nhiên, tôi không thể tìm thấy bất kỳ trợ giúp nào về trực tuyến hoặc trong tài liệu này.
Nhờ Void cho câu trả lời, nó đưa tôi đến với sử dụng này:
- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
NSPoint pt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
id item = [self itemAtRow: [self rowAtPoint:pt]];
return [self defaultMenuFor: item];
}
Nếu không chạy, có vẻ như nó sẽ hoạt động tốt. Phải không? Nếu không, bạn có vấn đề gì với nó? –
Ngoài ra, không sử dụng tiền tố NS trên các lớp học của riêng bạn. Nếu Apple thêm một lớp NSContextOutlineView vào một phiên bản tương lai của Cocoa, lớp của họ và của bạn sẽ va chạm, và ứng dụng của bạn có thể sẽ không chạy. –
Tôi nghĩ rằng vấn đề với mã được đăng là nó sẽ sử dụng selectedRow và không phải là hàng mà trên đó phải/ctrl-click được thực hiện. Điều đó có thể hoặc không thể là hàng đã chọn. – VoidPointer