2009-05-02 24 views
34

Tôi ngạc nhiên điều này không xảy ra tự động, nhưng tôi muốn cửa sổ ứng dụng của tôi tự động mở khi biểu tượng Dock được nhấp.Làm cách nào để cửa sổ Ứng dụng mở khi biểu tượng dock được nhấp?

Chỉ cần làm rõ, khi tôi mở ứng dụng, cửa sổ sẽ tự động mở, nhưng khi tôi nhấp vào chữ thập cho cửa sổ nhưng để ứng dụng chạy, cửa sổ sẽ không mở khi tôi nhấp vào biểu tượng đế.

+1

Điều này tự động xảy ra. Bạn có thể cụ thể hơn không? –

Trả lời

64

Thực hiện - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag trong đại biểu ứng dụng của bạn. Kiểm tra tài liệu để biết chi tiết về giá trị trả về.

Ứng dụng dựa trên tài liệu và các ứng dụng không dựa trên tài liệu hoạt động hơi khác một chút. Nếu không có cửa sổ mở khi biểu tượng dock của ứng dụng dựa trên tài liệu được nhấp thì nó sẽ tạo một tài liệu mới. Nếu không có cửa sổ mở khi biểu tượng dock của một ứng dụng không dựa trên tài liệu được nhấp thì nó sẽ không làm gì cả.

+0

Cảm ơn rất nhiều! – Joshua

+0

làm thế nào về trường hợp khi tôi có hai cửa sổ mở ra, cửa sổ chính và cửa sổ con. Cửa sổ con có trọng tâm. Tôi cần đặt cửa sổ chính được lấy nét sau khi nhấp vào biểu tượng đế. – BUDDAx2

5

Ứng dụng dựa trên tài liệu sẽ tự động mở một tài liệu không có tiêu đề mới khi ứng dụng hoạt động, vì vậy tôi giả sử bạn đang đề cập đến một ứng dụng không dựa trên tài liệu.

Thực hiện phương thức applicationDidBecomeActive: trong ứng dụng của bạn ủy quyền và mở/hiển thị cửa sổ.

Chỉnh sửa:

Một số thông tin về Delegates.

Một số thông tin về Opening and Closing WindowsNSWindow API

+0

Tôi không hiểu cách tôi có thể triển khai phương thức applicationDidBecomeActive: Bạn có thể cho tôi một đoạn mã/ví dụ/ – Joshua

+0

Hộp kiểm để ẩn khi tải trong IB không? – Joshua

+0

@Joshua - Tôi xin lỗi, nó hoàn toàn ngược lại. Nếu bạn chọn thanh tra cho Cửa sổ trong tệp nib, hãy đảm bảo rằng "Hiển thị khi khởi chạy" được chọn. –

9

Đây là những gì tôi đang làm để có được cửa sổ chính của ứng dụng không dựa trên tài liệu trở lại màn hình khi nó đã bị đóng. Tôi biết điều này có thể không đúng cách để làm điều đó nhưng nó làm việc cho tôi cho đến nay.

Thực hiện điều này trên AppDelegate, cửa sổ được định nghĩa là biến mẫu của cùng một đối tượng.

- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    [window makeKeyAndOrderFront:self]; 
    return NO; 
} 

Nếu có ai có giải pháp tốt hơn, vui lòng trả lời. Cảm ơn!

+0

Tôi cũng đang cố gắng tìm ra điều này (cách hiển thị một cửa sổ khác cho một ứng dụng dựa trên tài liệu) và điều này làm việc hoàn hảo! – Kyle

10
- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag 
{ 
    if (flag) { 
     return NO; 
    } 
    else 
    { 
     [YourWindow makeKeyAndOrderFront:self];// Window that you want open while click on dock app icon 
     return YES; 
    } 
} 
2

Một giải pháp để thêm vào câu trả lời được chấp nhận:

Với câu trả lời chấp nhận cửa sổ mở cửa trở lại không phản ứng với các sự kiện chuột nữa.

Khi sử dụng câu trả lời được chấp nhận, bạn cũng phải đảm bảo bỏ chọn "Thả khi đóng" trong Thanh tra thuộc tính của cửa sổ trong IB. Điều này khắc phục sự cố cửa sổ không phản hồi.

1

Khi người khác chỉ ra, sử dụng phương pháp applicationShouldHandleReopen để mở lại cửa sổ đã đóng trong ứng dụng không phải tài liệu là đúng cách. Thay đổi duy nhất tôi muốn thêm là một cách linh hoạt hơn để kiểm tra cửa sổ nào phải được hiển thị lại, bằng cách lặp qua danh sách .windows có thể nhìn thấy và vô hình của và kiểm tra cửa sổ được yêu cầu.

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 

    if flag == false { 

     for window in sender.windows { 

      if (window.delegate?.isKind(of: WelcomeWindowController.self)) == true { 
       window.makeKeyAndOrderFront(self) 
      } 
     } 
    } 

    return true 
} 

Phụ lục

a) Nếu cửa sổ được giấu sau đó nó sẽ được trưng bày tự động khi người dùng nhấp vào biểu tượng Dock ứng dụng, vì vậy không cần phải thực hiện applicationShouldHandleReopen phương pháp.

b) Đã kiểm tra Tùy chọn "Thả khi đóng" không ảnh hưởng đến bất kỳ hành vi nào ở trên.

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