2011-11-22 9 views
82

Gần đây tôi đã tự hỏi thực tế là một ứng dụng iOS chỉ có một UIWindow. Nó không có vẻ là một vấn đề để tạo ra một UIWindow và đặt nó trên màn hình.Ưu điểm, sự cố, ví dụ về cách thêm một UIWindow khác vào ứng dụng iOS?

Câu hỏi của tôi là loại mơ hồ, nhưng tôi mong muốn:

  • Những gì tôi có thể có khả năng đạt được với một giây UIWindow mà không thể được thực hiện theo những cách khác?
  • Điều gì có thể xảy ra khi sử dụng nhiều trường hợp UIWindow?
  • Tôi đã thấy mọi người sử dụng số UIWindow thứ hai để hiển thị cửa sổ bật lên như lượt xem trên iPhone. Đây có phải là cách hay để làm điều đó không? Tại sao? Tại sao không?
  • Có các ví dụ nào khác về việc có ý nghĩa hoàn toàn để có một số khác UIWindow không?

Nó không phải là tôi thiếu một cái gì đó. Tôi chưa bao giờ cảm thấy cần phải tạo một ví dụ UIWindow khác nhưng có lẽ nó sẽ cho phép làm những điều tuyệt vời mà tôi không biết! :-)

Tôi hy vọng rằng nó có thể giúp tôi giải quyết vấn đề này: Tôi cần phải thêm "chế độ xem ảnh" trên bất kỳ nội dung nào hiện được hiển thị. Nó cũng sẽ hoạt động nếu đã có một hoặc nhiều bộ điều khiển phương thức được trình bày. Nếu tôi thêm UIView vào chế độ xem của trình điều khiển gốc, bộ điều khiển phương thức nằm trên cùng, do đó, hãy thực hiện các trình điều khiển cửa sổ bật lên. Nếu tôi trình bày chế độ xem bìa một cách hợp lý và đã có một bộ điều khiển phương thức, chỉ một phần của màn hình được bao phủ.

+0

Sử dụng nhiều UIWindows trong ứng dụng iOS http://shaune.com.au/using-multiple-uiwindows-in-ios-applications/ – onmyway133

Trả lời

19

A UIWindow có thể nổi phía trên các phần tử giao diện người dùng khác như bàn phím hệ thống.

Để giải quyết đoạn cuối cùng của bạn: Tạo UIWindow với cùng khung như cửa sổ chính của bạn. Đặt thuộc tính windowLevel thành UIWindowLevelStatusBar. Đặt thuộc tính hidden thành NO.

+0

Err, được rồi. Cảm ơn. Tôi biết rằng. Bạn có thể nhận được một chút chi tiết wrt câu hỏi của tôi? Bạn có biết làm thế nào để có được RID của một giây UIWindow đã được thêm bởi makeKeyAndVisible? – Krumelur

+0

Đặt thuộc tính ẩn của UIWindow thứ hai thành CÓ. –

+0

Tôi đã sửa đổi câu trả lời của mình. –

92

Bắt đầu với câu trả lời của Rob tôi đã chơi xung quanh một chút và muốn viết ra một số lưu ý cho những người khác cố gắng để có được thông tin về chủ đề này:

  • Nó không phải là một vấn đề ở tất cả để thêm UIWindow khác. Chỉ cần tạo một và makeKeyAndVisible. Làm xong.
  • Xóa bằng cách hiển thị cửa sổ khác, sau đó thả cửa sổ bạn không cần nữa.
  • Cửa sổ là "khóa" nhận tất cả đầu vào bàn phím.
  • UIWindow bao gồm mọi thứ, kể cả các phương thức, popovers, v.v.
  • UIWindow luôn là chân dung hoàn toàn. Nó không xoay. Bạn sẽ phải thêm một bộ điều khiển làm bộ điều khiển gốc của cửa sổ mới và để xoay vòng điều khiển đó. (Giống như cửa sổ chính)
  • Cấp độ cửa sổ xác định mức độ hiển thị "cao". Đặt nó thành UIWindowLevelStatusBar để trang trải mọi thứ. Đặt thuộc tính hidden thành NO.
  • Có thể sử dụng UIWindow thứ hai để mang lại chế độ xem trên màn hình nổi trên đầu mọi thứ. Không tạo bộ điều khiển giả chỉ để nhúng vào trong một UIPopoverController.
  • Nó có thể đặc biệt hữu ích trên iPhone, nơi không có bộ điều khiển popover nhưng bạn có thể muốn bắt chước một cái gì đó giống như nó.
  • Và có, nó giải quyết tất nhiên vấn đề của tôi: nếu ứng dụng từ chức kích hoạt, thêm một cửa sổ bìa trên bất cứ điều gì hiện đang được hiển thị để ngăn iOS lấy ảnh chụp màn hình nội dung hiện tại của ứng dụng.
+0

Tôi sẽ không có can đảm để sử dụng một UIWindow khác nếu không có câu trả lời của bạn. [This] (http://stackoverflow.com/a/6698102/458193) cũng cực kỳ hữu ích vì UIWindow thứ hai sẽ không tự động chạy. –

+1

Bài đăng rất ngộ nghĩnh. Nhưng điều gì sẽ xảy ra nếu bạn từ chức cửa sổ này và tạo khóa cửa sổ bên dưới và có thể nhìn thấy và rootViewController của cửa sổ cơ bản này có một bộ điều khiển phương thức hiện đang được trình bày? Nó sẽ trình bày các bộ điều khiển xem phương thức trở lại? Điều gì xảy ra trong ứng dụng của chúng tôi là rootViewController được trình bày không phải là một phương thức ... –

+0

@Krumelur Điều này là tốt. Tôi có một nghi ngờ. Đó là, nói UIWindow thứ hai được hiển thị trên đầu trang của tất cả các quan điểm hiện tại. Khi người dùng nhấp vào một nút trên chế độ xem trong UIWindow thứ nhất đang trình bày thêm một chế độ xem. UIWindow thứ 2 này sẽ ẩn. Cách làm cho UIWindow này luôn được hiển thị trong toàn bộ ứng dụng. –