2010-08-02 12 views
7

Tôi đang cố gắng tạo lại các nút kết cấu đẹp như Finder, Safari và Truyền có trong thanh công cụ của chúng. Đầu tiên tôi bắt đầu bằng cách chỉ cần kéo vào một "nút Texture" trong IB và như vậy. Tất cả hoạt động tốt trừ khi người dùng đặt thanh công cụ thành chế độ "Chỉ văn bản". Khi anh ấy nhấp vào nút, thanh công cụ sẽ bật "Biểu tượng và nhãn" trên biểu tượng của riêng nó. Tôi đã loại bỏ alles mã và đại biểu từ thanh công cụ để đảm bảo rằng nó không phải là một vấn đề mã. Sau đó, chỉ để đảm bảo, tôi đã tạo một dự án mới (không có mã nào cả) và tôi có thể tạo lại vấn đề với NSWindow sạch với NSToolbar bằng một NSToolbarItem với một NSButton trong đó.NSButton trong NSToolbarItem (setView) khi được nhấp trong chế độ "Chỉ văn bản" để "Biểu tượng và Nhãn"

Thêm NSButtons qua mã như:

- (NSArray*)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar { 
    return [NSArray arrayWithObject:@"myToolbarMenu"]; 
} 

- (NSArray*)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar { 
    return [self toolbarAllowedItemIdentifiers:toolbar]; 
} 

- (NSToolbarItem*)toolbar:(NSToolbar*)toolbar 
    itemForItemIdentifier:(NSString*)str 
willBeInsertedIntoToolbar:(BOOL)flag 
{ 
    if ([str isEqualToString:@"myToolbarItem"] == YES) { 
     NSToolbarItem* item = [[NSToolbarItem alloc] initWithItemIdentifier:str]; 
     [item setView:[[NSButton alloc] init]]; 
     [item setMinSize:NSMakeSize(50,50)]; 
     [item setMaxSize:NSMakeSize(50,50)]; 
     [item setLabel:@"Text"]; 
     return [item autorelease]; 
    } 
    return nil; 
} 

Nhưng điều này cũng có tác dụng tương tự: khi tôi nhấn một NSToolbarItem với một NSButton trong nó trong "văn bản chỉ chế độ" trên thanh công cụ riêng của mình buộc chế độ đó là để " Biểu tượng và văn bản ".

Bạn có bất kỳ ý tưởng nào về cách tôi có thể làm cho nó hoạt động chính xác hoặc có thể có một giải pháp thay thế để tạo thanh công cụ đẹp như Safari vv không?

Trả lời

8

Bạn cần thêm trình bày trình đơn cho mỗi NSToolbarItem có chế độ xem tùy chỉnh. Bên dưới dòng nơi bạn phân bổ NSToolbarItem thêm điều này:

NSMenuItem *menuRep = [[NSMenuItem alloc] initWithTitle:@"Text" action:@selector(targetMethod:) keyEquivalent:@""]; 
[menuRep setTarget:<target>]; 
[item setMenuFormRepresentation:menuRep]; 

Miễn là mục tiêu hợp lệ, các mục của bạn nên ở lại dưới dạng nút chỉ văn bản; nếu không chúng sẽ bị vô hiệu hóa. Xem Setting a Toolbar Item's Representation.

Thông thường bạn cũng cần phải triển khai validateToolbarItem: trong mục tiêu của bạn, nhưng đối với các mục xem tùy chỉnh bạn cần ghi đè xác thực: để làm điều gì đó phù hợp. Xem Validating Toolbar Items.

+0

Xin lỗi vì phản hồi chậm. Cảm ơn câu trả lời, tôi chắc chắn sẽ kiểm tra nó càng sớm càng tốt. Cảm ơn câu trả lời. –