2011-02-01 23 views
15

Tôi đang tìm cách mang theo một chiếc NSWindow mới trước tất cả các cửa sổ khác, nhưng không tập trung.Làm cho NSWindow Phía Trước Nhưng Không Tập Trung

tôi có thể làm cho nó xuất hiện ở phía trước với trọng tâm như sau:

 
NSApplication *thisApp = [NSApplication sharedApplication]; 
[thisApp activateIgnoringOtherApps:YES]; 

[self makeKeyAndOrderFront:self]; 

Bất kỳ manh mối về cách để làm cho nó xuất hiện trên đầu nhưng không mất tập trung khỏi một ứng dụng khác?

Trả lời

15

Thay vì makeKeyAndOrderFront:, hãy thử chỉ orderFront: (docs)

+0

tôi nhận được kết quả tương tự ... các "activateIgnoringOtherApps: YES" chỉ là kéo lấy nét tự động tránh xa tất cả các ứng dụng khác. Nếu tôi xóa mã đó, thì cửa sổ mới chỉ xuất hiện phía sau các cửa sổ khác, điều này thật kỳ lạ, bởi vì các tài liệu nói rằng "orderFront:" sẽ hoạt động theo cách tôi đang tìm kiếm. – redhotvengeance

+1

@ilollar có thể thử ['- (void) orderFrontRegardless'] (http://developer.apple.com/library/mac/#documentation/cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html) – cobbal

+0

Hmmm ... đã thử điều đó, vẫn không có may mắn. Về mặt lý thuyết, các lời gọi cho orderFront và orderFrontRegardless là để sắp xếp các cửa sổ bên trong ngăn xếp hiển thị ứng dụng cụ thể, không phải tất cả các cửa sổ đang mở, phải không? – redhotvengeance

6

Hãy thử một cái gì đó như thế này:

[window setLevel:NSScreenSaverWindowLevel + 1]; 
[window orderFront:nil]; 

này sẽ hiển thị các cửa sổ trên các cửa sổ khác của ứng dụng, nhưng không làm cho nó hoạt động. Một cửa sổ có mức cửa sổ bình thường trong ứng dụng A không thể hiển thị trước cửa sổ ứng dụng B, nếu ứng dụng B là ứng dụng đang hoạt động. (Có lý do chính đáng cho việc này, btw).

Vui lòng sử dụng phương pháp này theo ý mình. Trong nhiều trường hợp, nó có thể sẽ vi phạm các nguyên tắc giao diện của con người. Nếu bị lạm dụng, nó có thể có xu hướng chọc tức người dùng. (Ví dụ, trong thử nghiệm của tôi vừa rồi, cửa sổ xuất hiện được đặt trực tiếp trên vị trí mà tôi tình cờ nhìn thấy trong Safari. Thực tế là nó đang theo cách tôi đang làm, nhưng có sự táo bạo để không phải trở thành Nếu nó đã được dựng lên trong một góc của màn hình của tôi, nó có thể là một câu chuyện khác nhau).

+0

Bingo! Điều đó hiệu quả. Tôi đồng ý với những lo lắng của bạn ... điều này có thể là một điều rất nguy hiểm để thực hiện nếu không được thực hiện một cách cẩn thận. Tôi hứa sẽ cẩn thận :) – redhotvengeance

+0

Tôi đã tìm ra các vấn đề của mình với "orderFrontRegardless" và đã chọn sử dụng phương thức đó thay vì đó có vẻ là cách tiêu chuẩn hơn để triển khai chức năng này. Phương pháp của bạn rất hữu ích để biết là tốt, tuy nhiên. Cảm ơn đã giúp đỡ! – redhotvengeance

4

Phương thức và cấp độ đặt hàng trước cho trình bảo vệ màn hình +1 không hoạt động đối với tôi. This answer từ The-Kenny đã làm, mặc dù:

[yourPanel setLevel:kCGMaximumWindowLevel]; 
Các vấn đề liên quan