Cách tạo ứng dụng Menubar cho Mac


175

EDIT: Đây là một ứng dụng menubar sẵn sàng tốt đẹp ở đây ( nguồn github ) bởi câu trả lời này .


Tôi đã tự hỏi làm thế nào để làm cho một ứng dụng menubar, các yêu cầu cho điều đó để làm như vậy là gì?

Tôi thấy một ứng dụng đơn giản cho thanh thực đơn là mở các liên kết bằng trình duyệt của bạn, tôi muốn tạo một cái gì đó tương tự như vậy.

nhập mô tả hình ảnh ở đây

Đây là ứng dụng tôi muốn làm tương tự.


4
Đây là một hướng dẫn đơn giản .
NSRover

Câu trả lời:


133

NSStatusItem là những gì bạn đang tìm kiếm. Đồng thời thêm LSUIE bổ sung với giá trị chuỗi là 1 vào Info.plist của bạn để ẩn nó khỏi Dock.


14
mactech.com/articles/mactech/Vol.22/22.02/Menulet - đây là một mã mẫu với một số giải thích.
SteamTrout

2
Bạn có thể xem một trong các dự án GitHug của tôi để biết ví dụ: github.com/nippysaurus/WeatherRock/blob/master/ mẹo
Nippysaurus

3
Tôi đã triển khai ví dụ được mô tả trong liên kết của SteamTrout và đưa nó lên github. Nó ở đây: github.com/wanderingstan/IPMenuletExample
Stan James

Xin chào Steam Trout, cảm ơn sự giúp đỡ của bạn ... nhưng làm cách nào chúng tôi có thể giữ phím tắt ứng dụng của chúng tôi luôn trong thanh menu, cho đến khi người dùng gỡ cài đặt ứng dụng ... bất kỳ trợ giúp nào .... stackoverflow.com/questions/23605687/
Thẻ

66

Tôi đã thấy Popup của Codebox là một điểm khởi đầu tuyệt vời. Nó đã chín muồi để giả mạo trên Github.

nhập mô tả hình ảnh ở đây

Mặc dù nó hoạt động tốt, nhưng họ lưu ý trên trang web của họ ...

PS Trong Lion, Apple đang thêm một lớp mới cho popovers như trong iOS. Vì vậy, sau khi OS X 10.7 được phát hành, bạn nên dựa vào các lớp Cacao nguyên bản ở những nơi có thể. Trong các trường hợp khác, dự án Popup vẫn có thể sử dụng được.


3
Điều này không đúng trong mọi trường hợp. NSPopover có những hạn chế nghiêm trọng: Trường văn bản / Chế độ xem không thể trở thành phản hồi đầu tiên và do đó bạn không thể nhập văn bản.
Christian Kienle

@ChristianKienle vì vậy bạn vẫn sẽ khuyên bạn nên bắt đầu với ứng dụng Popup với các phiên bản OS X> 10.7?
fatuhoku

Đúng. NSPopover + Mục trạng thái có những hạn chế nghiêm trọng trong 10.7 và 10.8. Ví dụ: ảnh chụp màn hình ở trên hiển thị trường tìm kiếm. Bằng cách sử dụng NSPopover, bạn không thể tương tác với trường tìm kiếm đúng cách.
Christian Kienle

1
Tại sao mẫu Popup của Codebox lại có BackgroundPanel phức tạp như vậy?
rbp

13

BitBar là một ứng dụng trên GitHub có thể "Đặt bất cứ thứ gì vào thanh menu Mac OS X của bạn".

Nó chạy shell hoặc các tập lệnh thực thi khác (mà nó gọi là Plugins - xem nhiều ví dụ trong repo plugin ) và hiển thị kết quả trong thanh menu. Bạn có thể viết plugin của riêng mình và chạy nó đơn giản bằng cách thêm nó vào 'Thư mục Plugins'. Cũng như hiển thị thông tin, nó cũng có thể chạy các tập lệnh bash được xác định trước một cách tương tác từ các menu plugin bạn xác định.

Kể từ lần đầu tiên tôi đăng câu trả lời này, sự phổ biến của nó đã bùng nổ (hiện tại có 52 người đóng góp) và giờ đây thậm chí còn có một phiên bản có thể phân phối mà bạn có thể đóng gói các plugin của riêng mình.

Một ví dụ rất đơn giản (không tương tác) để hiển thị giá Bitcoin trực tiếp:

nhập mô tả hình ảnh ở đây


4
cảm ơn cwd vì đã cải thiện câu trả lời ban đầu khá kém của tôi
MatzFan

10

Khi Apple thêm NSStatusBarButtontài sản NSStatusItemvào Yosemite, chúng tôi có thể triển khai ứng dụng menubar đơn giản hơn rất nhiều. Tôi vừa tạo một dự án mẫu trên github.

https://github.com/taichino/PopupTest


Cảm ơn bạn đã đặt điều này cùng nhau!
cwd

2

FlyCut là một ứng dụng mã nguồn mở tốt đẹp khác thực hiện điều này. (MIT cấp phép.) Cũng rất tiện dụng, tôi sử dụng nó nhiều lần trong ngày.

Đây là một số mã có vẻ như có thể có liên quan:

    // Flycut/AppController.h
    IBOutlet NSMenu *jcMenu;

    // Flycut/AppController.m
    statusItem = [[[NSStatusBar systemStatusBar]
            statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setHighlightMode:YES];

    if ( [[DBUserDefaults standardUserDefaults] integerForKey:@"menuIcon"] == 1 ) {
        [statusItem setTitle:[NSString stringWithFormat:@"%C",0x2704]]; 
    } else if ( [[DBUserDefaults standardUserDefaults] integerForKey:@"menuIcon"] == 2 ) {
        [statusItem setTitle:[NSString stringWithFormat:@"%C",0x2702]]; 
    } else {
        [statusItem setImage:[NSImage imageNamed:@"com.generalarcade.flycut.16.png"]];
    }
    [statusItem setMenu:jcMenu];
    [statusItem setEnabled:YES];

Xin chào funroll, tôi muốn giữ phím tắt này luôn trong thanh menu như điều khiển valume mặc định trong mac là có thể với lập trình ... vui lòng giúp tôi !!!
VSN

@VSN Ý kiến ​​StackOverflow không phải là nơi tốt để yêu cầu trợ giúp như thế này. Tôi sẽ đề nghị đọc Làm thế nào để hỏi một câu hỏi hay .
funroll

tôi đã hỏi câu hỏi mới - bất kỳ trợ giúp nào ở đó .... stackoverflow.com/questions/23605687/ trên
VSN

0

Mail Notifr là một ứng dụng Menubar mã nguồn mở khác. Nó giúp tôi rất nhiều, đặc biệt là khi tôi cần tìm ra cách thực hiện mở khi đăng nhập. Cũng có sẵn trên App Store .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.