2011-02-06 27 views

Trả lời

6

Vâng, tôi đã tìm ra điều này, nhưng phải mất rất nhiều nghiên cứu vì vậy tôi sẽ đăng chi tiết ở đây trong trường hợp bất kỳ ai khác gặp phải vấn đề tương tự. Trước hết, một vài điều cơ bản:

  1. Nó không thể có 2 cửa sổ thực sự là chìa khóa cùng một lúc
  2. Có thể đến một cửa sổ giả vào suy nghĩ nó là chìa khóa bằng cách ghi đè -isKeyWindow nhưng điều đó sẽ không cung cấp cho các số lượt xem có trong trạng thái trả lời đầu tiên của cửa sổ.

Kịch bản của tôi:

Tôi đã thêm một cửa sổ con chứa một NSTableView vào cửa sổ ứng dụng chính của tôi (lý do là irrelavant). Cửa sổ con là NSPanel với NSBorderlessWindowMask. Tôi muốn đưa ra trạng thái trả lời đầu tiên NSTableView mà không làm cho cửa sổ khóa trở thành cửa sổ chính vì nó lấy đi tiêu điểm từ cửa sổ chính (và toàn bộ điểm ảo ảnh của cửa sổ con là làm cho cửa sổ con trông giống như một phần của cửa sổ chính).

Điều đầu tiên tôi đã thử là đánh lừa chế độ xem bảng để nghĩ rằng nó nằm trong cửa sổ chính bằng cách ghi đè isKeyWindow để trả lại YES. Điều này làm cho chế độ xem bảng vẽ như thể đó là phản hồi đầu tiên, nhưng vẫn không cho trạng thái trả lời đầu tiên.

Giải pháp:

Vì vậy, theo mặc định, NSBorderlessWindowMask sẽ không cho phép các cửa sổ trở nên quan trọng. Để làm cho bảng xem trả lời đầu tiên, cửa sổ phải là chìa khóa để tôi overrode canBecomeKeyWindow trong lớp con cửa sổ không biên giới để trả về YES. Điều này, tất nhiên, lấy đi tình trạng khóa từ cửa sổ chính, đó là một trong những điều tôi muốn tránh. Để khắc phục điều này, tôi subclassed chính cửa sổ của tôi và gạt các phương pháp sau:

- (BOOL)isMainWindow 
{ 
    return YES; 
} 

- (BOOL)isKeyWindow 
{ 
    return ([NSApp isActive]) ? YES : [super isKeyWindow]; 
} 

kiểm tra lớp con này nếu ứng dụng được kích hoạt, và nếu nó là, nó luôn luôn trả YES để không có vấn đề gì cửa sổ đang hoạt động trong ứng dụng của bạn, cửa sổ chính sẽ luôn hoạt động như thể nó vẫn là chìa khóa. Loại này cung cấp cho ảo tưởng rằng bạn có thể có nhiều cửa sổ được chìa khóa cùng một lúc và cho phép bạn thay đổi trạng thái cửa sổ chính sang cửa sổ khác mà không làm mất nó trên cửa sổ chính của bạn. Hi vọng điêu nay co ich!

+0

Câu trả lời thú vị. Lưu buổi sáng của tôi. Cảm ơn! –

+0

Có thể giải pháp này không hoạt động được nữa bằng cách sử dụng 10.8 không? – tungsten

+0

Bạn có ý nghĩa gì bởi “không hoạt động”? –

Các vấn đề liên quan