2012-05-19 39 views
9

Tôi cần kiểm tra xem liệu có còn một chế độ xem phương thức trên trình điều khiển chế độ xem gốc hay không. Vấn đề tôi đang gặp phải là tôi có một chế độ xem thứ hai từ một số chuỗi cần được hiển thị. Tôi muốn trì hoãn chế độ xem phương thức thứ hai cho đến khi chế độ xem đầu tiên biến mất. Tôi không thể khởi chạy nó sau lần đầu tiên bị loại bỏ vì chế độ xem phương thức thứ hai là có điều kiện.Làm cách nào để kiểm tra xem chế độ xem phương thức hiện có trên self.window.rootViewController của tôi không?

[self.window.rootViewController presentModalViewController:vc animated:YES]; 

Những gì tôi muốn làm (bạn có thể đề nghị một cách khác tốt hơn):

  1. Kiểm tra nếu self.window.rootViewController hiện có một cái nhìn phương thức hiển thị trên đầu trang (hoặc vẫn còn hiệu ứng động xem modal).
  2. sử dụng performSelector:afterDelay:0.1
  3. Kiểm tra một lần nữa, và nếu cần thiết, trì hoãn một lần nữa

Trả lời

13

Nhận rootViewController.presentedViewController (có sẵn trong iOS 5.0+) hoặc rootViewController.modalViewController (có sẵn trong iOS 2.0+) và xem có phải là không.

Ngoài ra, bạn không muốn trình bày điều khiển xem thứ hai từ sợi thứ cấp, tất cả các giao diện người dùng thứ được thực hiện trên các chủ đề chính.

+0

Điều này đúng không? "Dispatch_async (dispatch_get_main_queue(),^{ MedicationReminderViewController * vc = [[MedicationReminderViewController alloc] initWithNibName: @" MedicationReminderViewController "bó: nil]; [theDelegate.window.rootViewController presentModalViewController: vc hoạt hình: YES]; });" – Pieter

+0

@Pieter, Điều này là tốt, có, mã này sẽ được thực hiện trên chủ đề chính – tux91

+0

Tôi cho rằng rootViewController.modalViewController là bất kỳ modalViewController được hiển thị modally trên đầu trang của rootViewController? – Pieter

0

tôi bị cám dỗ để làm một cái gì đó xác định hơn một chút. Có một đoạn mã chịu trách nhiệm thực hiện cả hai màn hình phương thức và để nó theo dõi khi phương thức đầu tiên xuất hiện và biến mất sao cho, nếu nó nhận được thông báo để hiển thị thông báo thứ hai, nó biết có nên làm hay chỉ cần đặt "đang chờ xử lý "cờ. Khi người ta nói rằng người đầu tiên đã bị loại bỏ, nó có thể kiểm tra xem một thứ hai đang chờ xử lý.

1

Tôi cũng phải đối mặt với loại vấn đề này. Tôi muốn bật lên một phương thức từ đẩy và trước khi tôi làm điều đó tôi muốn kiểm tra xem một số màn hình đã được trình bày và nếu có bỏ qua những người và bật màn hình của tôi dưới đây là mã.

// Dismiss all the modals which are currently shown. 
    - (void) dismissAllModalsIfAnyWithCompletion:(void(^)(BOOL success)) completion{ 

      BOOL hiddenByModal = nil != [[UIApplication sharedApplication].keyWindow.rootViewController presentedViewController]; 
     if (hiddenByModal) { 
//We need to dismiss the existing modal and after completion pop up the new modal. 
      [[UIApplication sharedApplication].keyWindow.rootViewController dismissViewControllerAnimated:NO completion:^{ 
       // After dismissing let the handler know. 
       completion(YES); 
      }]; 
     } 
     else{ 
// If there is no modal, then simply let the handler know to pop the new modal. 
      completion(YES); 
     } 
    } 
+1

Giải pháp trang nhã đẹp mắt. (Mặc dù cờ BOOL có vẻ hơi quá phức tạp. Tại sao không chỉ làm 'if ([[UIApplication sharedApplication] .keyWindow.rootViewController presentsViewController])'?) –

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