10

Câu hỏi này đã được hỏi trước, nhưng những câu hỏi được trả lời tôi có thể tìm thấy là từ năm 2009 và không phù hợp với vấn đề của tôi. Hãy để tôi nhắc lại vấn đề.Nhận thông báo khi bộ điều khiển xem sắp xuất hiện trong iOS4

Tôi có một số UINavigationController để sinh ra và đẩy nhiều lô khác nhau UIViewController vào ngăn xếp của nó. Một trong những giao dịch với một số hoạt động của Dữ liệu cốt lõi cần phải được lưu khi một VC cụ thể được bật ra khỏi ngăn xếp. Đừng tập trung vào phần Dữ liệu cốt lõi, đó là về việc popping.

Làm thế nào tôi có thể móc vào khoảnh khắc mà UIViewController sắp được bật ra khỏi ngăn xếp?

  • Tôi đã hy vọng một phương thức đại biểu của một số loại, nhưng không thể tìm thấy nó. Giao thức UINavigationControllerDelegate rất thưa thớt.
  • sau đó tôi bắt đầu nghĩ đến việc sử dụng viewWillDisappear, nhưng đó là một trong còn gọi là nếu nhìn khác được đẩy vào stack, vì vậy nó không cung cấp đúng thời điểm.
  • This answered question, from 2009, chọn để xem viewWillAppear của bộ điều khiển chế độ xem mà chúng tôi đang 'popping to', nhưng vì cuộc gọi đó không có tham chiếu đến VC cần kiểm tra, điều này là không đạt yêu cầu và sẽ giới thiệu một mức độ phụ thuộc mà là phản tác dụng (VC được sử dụng bởi một số NC).
  • Another answered question, also from 2009, chuyển sang lớp con UINavigationController và viết lại phương thức popViewControllerAnimated:. Hoặc cách khác sử dụng dealloc của VC. Ruột của tôi nói với tôi rằng không thể là con đường để đi.
  • Cuối cùng, có one last recent question from march 2011, nhưng không ai quan tâm để trả lời.

Điều đó khiến tôi trong trạng thái không hài lòng hiện tại của mình. Có ai ra khỏi đó với một giải pháp tốt hơn để tìm thấy thời điểm UIViewController của bạn được bật ra khỏi ngăn xếp của UINavigationController?

Chúc mừng,
EP.

+0

Tôi phải đối mặt với cùng một vấn đề. Tuy nhiên, tôi có thể thêm một số thông tin theo http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/DeprecationAppendix/AppendixADeprecatedAPI.html cả viewDidUnload & viewWillUnload đều không được chấp nhận trong iOS6 –

Trả lời

9

viewWillDisappear là đại biểu phù hợp. Bạn sẽ cần thêm logic trong phương thức này nếu bạn muốn xác định xem chế độ xem hiện tại hiện tại là popped hoặc mới đang được đẩy. Đã được trả lời ở đây - viewWillDisappear: Determine whether view controller is being popped or is showing a sub-view controller

+0

Phát hiện, được gói nó trong một thể loại và hoạt động như một sự quyến rũ. Cảm ơn @ Jason! – epologee

+9

Tôi vừa xem câu trả lời của bạn. Nó trông đẹp nhưng hơi phức tạp một chút cho những gì thực sự cần thiết. Tôi đề nghị rằng điều này có thể sạch hơn: 'if (! [Self.navigationController.viewControllers containsObject: self]) { // POPPED! } ' –

+0

Tốt nhất. Có thể lạ khi có cùng VC trong ngăn xếp của bộ điều hướng hai lần. Chúc mừng! – epologee

0

Tôi tin rằng tôi sẽ đi theo hướng khác về điều này và cố gắng nắm bắt cuộc thăm dò từ chế độ xemController cá nhân thay vì navigationController. Để một viewController cá nhân, nhận được popped trông giống như nó đang được deallocated, và đó là hoàn toàn hookable.

Phân lớp UIViewController, triển khai thông báo của bạn trong -dealloc. Hãy chắc chắn gọi số [super dealloc].

Sau đó, có mọi chế độ xem mà bạn đẩy vào bộ điều khiển điều hướng của bạn phân lớp lớp con điều khiển chế độ xem tùy chỉnh mới của bạn. Họ có thể làm bất cứ điều gì họ làm trong viewDidUnload của riêng họ, và sau đó gọi [super dealloc] (trong trường hợp này là super là lớp con UIViewController của bạn) để kích hoạt thông báo.

+0

Điều này sẽ không hoạt động. Nếu bạn bật một VC từ một ngăn điều khiển điều hướng, nó sẽ không đi qua -viewDidUnload –

+0

@Pier - Bạn chắc chắn? Tôi đã làm một cái gì đó như thế này, nhưng nó đã được một thời gian ... Tôi đã bắt 'dealloc' có thể? –

+0

Có -dealloc được gọi. viewDidUnload chỉ được gọi khi VC nhận được cảnh báo bộ nhớ và không phải là bộ điều khiển xem trên cùng. –

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