2009-03-08 18 views
10

Tất cả các bạn đều biết thanh menu (hoặc NSStatusBar tốt hơn) trong Mac OS X.
Có một số mục mà tôi có thể di chuyển và những thứ khác không có.Cách kéo NSStatusItems

Tôi muốn có thể kéo NSStatusItem của ứng dụng của tôi.

Bất kỳ ý tưởng nào về cách triển khai tính năng này?

Trả lời

19

Mặc dù NSStatusItems xuất hiện gần "phần bổ sung menu" của Apple, chúng khác biệt và hoạt động khác nhau. Sẽ tốt hơn nếu Apple hợp nhất các mục có thể xuất hiện ở khu vực bên phải của thanh menu, nhưng hiện tại phần này được chia thành "nội bộ táo" riêng biệt (bên phải) và "ứng dụng được cung cấp (NSStatusItem) " bên trái.

Bạn có thể hình dung sự khác biệt bằng cách đưa máy tính của bạn vào chế độ chụp màn hình (cmd-shift-4) và nhấn phím cách để chuyển sang "chụp toàn bộ cửa sổ". Khi bạn di chuột qua các biểu tượng menu của Apple, bạn sẽ thấy rằng tất cả chúng đều nằm trong một cửa sổ duy nhất. Điều này giải thích khả năng của họ để dễ dàng quản lý và kéo về. Di chuột qua các mục khác cho thấy rằng mỗi NSStatusItem là trong thực tế, sống trong một cửa sổ riêng của mình (mà sẽ xảy ra được sở hữu bởi các ứng dụng cài đặt nó).

Tốt nhất là nên kết hợp với NSStatusItem ngay cả khi bạn không thể kéo chúng. Đó là một thiếu sót từ Apple mà hầu hết người dùng sẽ hiểu, ngay cả khi nó gây phiền nhiễu. Nhấn mạnh sự cân bằng tích cực của việc cung cấp một ứng dụng ổn định hơn cho lâu dài thường sẽ làm dịu các ý kiến ​​của khách hàng của bạn (hoặc các nhà quản lý?) Đang thúc đẩy khả năng kéo.

+1

Cập nhật nhanh chóng cho nhận xét tuyệt vời của Daniel: macOS Sierra đã thêm một số khả năng vào NSStatusItem và bây giờ chúng có thể được kéo và đặt ở bất cứ đâu, điều này thật tuyệt vời. –

14

Bạn sẽ phải sử dụng NSMenuExtra, không NSStatusItem và đặt mục menu thành một gói chạy bên trong quy trình SystemUIServer chứ không phải ứng dụng của riêng bạn. Bạn cũng sẽ cần mã như được cung cấp bởi MenuCracker để có được điều này để làm việc.

NSMenuExtra không có giấy tờ và không được hỗ trợ và do đó được coi là "hack". Tôi nghĩ rằng có hai API ở vị trí đầu tiên: một menu thêm bị lỗi (hoặc rò rỉ bộ nhớ) có nghĩa là toàn bộ quá trình SystemUIServer bị lỗi hoặc rò rỉ bộ nhớ - bao gồm các mô-đun bên thứ ba khác cũng như các hệ thống được cung cấp. Mặt khác, với một mục trạng thái, một vấn đề như vậy sẽ chỉ ảnh hưởng đến mã của riêng bạn.

+1

Mục nhập blog được tham chiếu là không thể truy cập được. – jottr

0

Tính đến hệ điều hành MacOS Sierra 10,12 http://www.macworld.co.uk/how-to/mac-software/7-sierra-menu-bar-tips-how-use-mac-menu-bar-in-macos-sierra-3649163/

ứng dụng của bên thứ ba đôi khi cài đặt như tính năng bổ sung trình đơn, có các điều khiển mà tồn tại trong thanh trình đơn, hoặc có thể được bắt đầu lại như các ứng dụng faceless mặc dù ban đầu không được như vậy. Theo macOS Sierra, các tính năng bổ sung của menu này có thể được sắp xếp lại giống như các phần tử gốc. (Đây không phải là trường hợp thông qua OS X El Capitan.)