15

Hãy nói rằng tôi có 2 UIViewControllers trên một ngăn xếp trong một UINavigationController. Trong "parent" chúng ta gọi là "[self.navigationController pushViewController: childViewController animated: YES];" khi một số hành động của người dùng và trong "con" chúng ta gọi là "[self.navigationController popViewControllerAnimated: YES];" khi một số hành động của người dùng.iOS: Làm thế nào để nhận ra rằng chúng tôi đã trở lại từ một đứa trẻ UIViewController trong phụ huynh UIViewController?

Làm cách nào chúng tôi có thể nhận ra trong phụ huynh mà chúng tôi vừa trở lại?

Có phương thức điều khiển "sự kiện" nào có thể nhận ra rằng hành động popViewControllerAnimated này được gọi từ đứa trẻ không?

Trả lời

0

Lần đọc đầu tiên this, nó sẽ giúp bạn hiểu những gì đang diễn ra với bộ điều khiển chế độ xem.

Sau đó, triển khai viewWillAppear:viewDidAppear: trong trình điều khiển chế độ xem cha mẹ của bạn để ghi nhật ký thư.

+1

Điều này không cho bạn biết, tuy nhiên, bộ điều khiển nào khác đã xuất hiện. Có thể tồn tại vài cái khác nhau. Nhưng không phải tại một thời điểm trong trạng thái bị đẩy, tất nhiên, vì vậy OP có thể chỉ đơn giản theo dõi bộ điều khiển nào được đẩy cuối cùng. –

1

Có một vài cách để gợi ý về điều đó. Những gì bạn có thể làm, được gọi là popViewControllerAnimated từ cha mẹ. Bạn có thể làm điều đó bằng cách chuyển một block đến bộ điều khiển con mà sau đó sẽ thực hiện khối đã nói và do đó popping sẽ được thực hiện bởi bộ điều khiển cha.

Bạn cũng có thể sử dụng các đại biểu UINavigationController để được thông báo khi một UIViewController sẽ bị sa thải:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated; 

Phương pháp này sẽ cho bạn biết các VC sẽ được hiển thị và bạn có thể kiểm tra xem hiện tại (chưa popped VC là đứa trẻ bạn đang tìm kiếm.

Bạn cũng có thể thực hiện một số thủ thuật với - (void) viewWillAppear: nhưng điều này có thể yêu cầu một số hack.

6

Có vẻ như bạn đang sử dụng bộ điều khiển con này làm phương thức ở chỗ nó có thể bị 'loại bỏ'. Nếu đúng như vậy, hãy thử làm theo các mẫu của Apple mà họ sử dụng cho UIAlertViews.

Nếu trường hợp đó xảy ra, tôi sẽ thực hiện một trong các cách sau để thực hiện mẫu đại biểu (delegate vs block là một cuộc tranh luận lớn mà tôi sẽ không nhận được ở đây) để chủ sở hữu (người đẩy con) biết khi nào bác bỏ nó:

  • Tạo một giao thức (ChildControllerDelegate), đã một phương pháp trong đó childControllerWasDismissed: (ChildController *)
  • thêm một thuộc khối (chắc chắn nó thuộc tính sao chép, không giữ lại) đến ChildController

Bạn sẽ t hen muốn gọi phương thức ủy nhiệm hoặc chặn trên viewDidDisappear. Nếu bạn muốn kiểm soát hạt mịn hơn, hãy có phương thức hoặc khối đại biểu tương ứng với viewWillDisappear/viewDidDisappear.

3

Tôi đã giải quyết thành công việc này bằng cách đặt navigationController?.delegate = self và sau đó triển khai phương pháp này để xác định xem bộ điều khiển chế độ xem hiện tại có được hiển thị lại sau khi bật hay không.

func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) { 
     if viewController == self { 
      // we got back 
     } else { 
      // some other controller was pushed 
     } 
    } 
Các vấn đề liên quan