2013-08-08 38 views
11

Tôi đã tạo một ứng dụng Cocoa đơn giản trong XCode 4.6 với một NSPanel thay vì mặc định NSWindow. Khi tôi cho phép các phi Kích hoạt tùy chọn và khởi động ứng dụng tất cả mọi thứ hoạt động tốt:NSPanel trong "Không kích hoạt" -Mode không luôn luôn hiển thị chính xác con trỏ

Bảng sẽ được hiển thị ở phía trước mọi thứ khác và khi con trỏ chuột di chuyển lên cạnh của bảng điều khiển nó thay đổi từ một bình thường mũi tên con trỏ với con trỏ thay đổi kích thước thích hợp, vì vậy người dùng biết rằng anh ấy có thể đổi kích thước bảng điều khiển.

Điều này hoạt động tốt miễn là tôi không nhấp vào bất kỳ ứng dụng nào khác ví dụ như Safari hoặc Trình tìm kiếm.

Từ thời điểm tôi đã tập trung vào một ứng dụng khác, Tôi có thể nhấp vào và di chuột qua bảng của mình nhiều như mình muốn, kiểu con trỏ sẽ không thay đổi nữa - nó luôn luôn là mũi tên và không thể trở lại hành vi bình thường.

Bảng điều khiển vẫn có thể lựa chọn và ở phía trước, bạn vẫn có thể di chuyển và đổi kích thước nó, nhưng con trỏ chuột vẫn giữ một mũi tên mọi lúc. Sau đó, bạn thậm chí không thể thay đổi nó theo cách thủ công bằng cách sử dụng một cái gì đó như: [[NSCursor crosshairCursor] set].

Vì vậy, tôi cần phải tìm một cách để tạo ra một NSPanel mà giữ bình thường tự động-change-cursorstyle-khi-lơ lửng-over-panel-gờ-hành vi ngay cả khi bạn đưa ra tập trung vào một ứng dụng khác.

Tôi đã cố gắng sử dụng một tùy chỉnh NSPanel đẳng cấp, nơi tôi đã ghi đè các phương pháp canBecomeKeyWindowcanBecomeMainWindow, để họ trở YES nhưng ngay cả khi tôi thực hiện Bảng điều chỉnh của tôi KeyWindowMainWindow ...

[myPanel makeKeyAndOrderFront:self]; 
[myPanel makeMainWindow]; 

... nó không giải quyết được vấn đề con trỏ.

Sẽ là tuyệt vời nếu ai đó có thể giúp tôi đây :)

PS .: SDK Base và Deployment Target được thiết lập để 10,8 trong dự án của tôi


Vì vậy, tôi phát hiện ra rằng các mô tả vấn đề không liên quan gì đến trạng thái cửa sổ của bảng điều khiển. Nó thực sự không quan trọng nếu nó được thiết lập để chính hoặc chính, thay vì con trỏ-vấn đề (vẫn mũi tên tất cả các thời gian) có liên quan đến trạng thái kích hoạt của ứng dụng.

Mọi thứ hoạt động tốt miễn là ứng dụng sở hữu bảng điều khiển đang hoạt động nhưng nếu bạn nhấp vào ứng dụng khác, ứng dụng của tôi bị vô hiệu hóa và không được kích hoạt lại - ngay cả khi bạn nhấp vào bảng điều khiển - vì "non-activating" - tùy chọn được bật.

Vấn đề là tôi cần "non activating" -option vì tôi đang tạo ứng dụng chụp màn hình trạng thái, màn hình sẽ được hiển thị và hoạt động trước mọi thứ khác nhưng không tắt bất kỳ ứng dụng đang chạy nào.Tôi có thể giải quyết vấn đề con trỏ bằng cách

[NSApp activateIgnoringOtherApps];

nhưng sau đó tham gia một ảnh chụp màn hình của một video toàn màn hình chạy trong Safari sẽ tắt Safari và thu nhỏ video, mà tôi không muốn.

+0

Tôi có cùng một vấn đề. Có thể đăng lại nếu tôi tìm ra điều gì đó. –

Trả lời

1

Tôi không nghĩ rằng có thể thông qua các API thông thường để thay đổi con trỏ khi ứng dụng của bạn không hoạt động. Tôi khá chắc chắn rằng hệ thống cửa sổ không cho phép nó: nó sẽ là vi phạm ranh giới giữa các ứng dụng — nếu bạn cố gắng đặt con trỏ từ nền và ứng dụng tiền cảnh cũng cố gắng đặt con trỏ, thắng lợi?

Tất nhiên, hệ thống có thể làm điều đó (như khi bạn chụp ảnh màn hình với ⌘⇧4), bởi vì đó là trong chính hệ thống cửa sổ.