2011-11-15 44 views
8

Tôi muốn hiển thị một NSPopover từ một nút NSToolbarItem trong thanh công cụ của tôi.
(tức là được đặt bên dưới nút).Hiển thị NSPopover từ Nút NSToolbarItem

Lý tưởng nhất, tôi muốn chuyển số NSView của nút đến cửa sổ bật lên để định vị nó.
Câu hỏi của tôi là, làm cách nào để nhận được NSView của NSToolbarItem?

[toolbarbutton view] luôn trả về số không.

Trả lời

2

Bạn có thể gửi tác động trực tiếp từ NSButton kèm trong NSToolbarItem (đó là những gì bạn thường nên làm dù sao, hãy xem xét điều khiển phân đoạn, trong đó mỗi phân khúc có mục tiêu riêng của mình/hành động), và điều đó sẽ làm các trick.

+0

Cảm ơn - Tôi sẽ thử. –

2

Thay vì nhận được cái nhìn từ người gửi IBAction, kết nối một IBOutlet trực tiếp đến mục thanh công cụ và sử dụng để có được cái nhìn tương đối:

Trong tập tin tiêu đề của bạn:

@property (weak) IBOutlet NSToolbarItem *theToolbarItem; 
@property (weak) IBOutlet NSPopover *thePopover; 

Trong thực hiện của bạn tệp, để hiển thị cửa sổ bật lên:

[self.thePopover showRelativeToRect:[[self.theToolbarItem view] bounds] ofView:[self.theToolbarItem view] preferredEdge:NSMinYEdge]; 

Điều này cũng sẽ hoạt động để hiển thị cửa sổ bật lên từ các mục menu trong mục thanh công cụ.

0

Trong khi tôi đã đạt được điều đó các Popover được hiển thị bằng cách sử dụng phương pháp được đề cập bởi Stuart Tevendale, tôi đã chạy vào vấn đề khi tôi đã cố gắng để xác nhận (bật/tắt) các NSToolbarItems sử dụng NSToolbarDelegate:

-(BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem { 
    BOOL enable = YES; 

    NSString *identifier = [toolbarItem itemIdentifier]; 

    // This does never get called because I am using a button inside a custom `NSToolbarItem` 
    if ([identifier isEqualToString:@"Popover"]) { 
     return [self someValidationMechanism]; 
    } 

    // For this the validation works when I am using a standard `NSToolbarItem` 
    else if ([identifier isEqualToString:@"StandardToolbarItem"]){ 
     return [self someOtherValidationMechanism]; 
    } 

    return enable; 
} 

Vì vậy, Tôi khuyên không nên hiển thị Popover từ NSToolbarItem. Một thay thế có thể là hiển thị Trang tính: How to show a NSPanel as a sheet

Các vấn đề liên quan