2012-03-29 15 views
10

Khi triển khai ngăn chứa UIViewController, thứ tự đúng của các thông điệp sau tôi phải gửi là gì, khi trao đổi một bộ điều khiển con với bộ điều khiển khác?Thứ tự đúng của thông điệp ngăn chặn UIViewController tôi phải gửi khi không sử dụng transitionFromViewController là gì?

Có phải như sau hoặc đơn đặt hàng của tôi không chính xác? Tôi có thiếu tin nhắn không?

  • Thêm điều khiển con mới để điều chỉnh dòng điện: addChildViewController:
  • Thêm subview của bộ điều khiển con mới để xem hiện tại bộ điều khiển của: addSubview:
  • Chạy một số chuyển lạ mắt khỏi tầm nhìn cũ để nhìn mới.
  • Thông báo cho bộ điều khiển mới đứa trẻ đó đang được bổ sung vào bộ điều khiển khác: didMoveToParentViewController:
  • Di view controller trước từ SuperView của nó: removeFromSuperview:
  • Tháo điều khiển trước con từ mẹ của nó: removeFromParentViewController:

EDIT: Tôi phải chú thích rằng ở trên chỉ trở thành một vấn đề của bạn không sử dụng phương pháp chuyển tiếp của UIViewController mà là muốn thêm chế độ xem mới theo cách thủ công.

Trả lời

15

OK, đã tìm ra. Đó là tất cả trong tài liệu nhưng tôi thấy nó khá tốt ẩn. Tôi sẽ chia nó thành ba trường hợp bởi vì tôi nghĩ rằng nó có thể giúp đỡ người khác. Tại sao tôi lại gặp khó khăn thay vì sử dụng [UIViewController transitionFromViewController:toViewController:duration:options:animations:completion]? Câu trả lời là bạn chỉ có thể sử dụng phương thức chuyển tiếp nếu đã có một bộ điều khiển xem hiện có. Nếu bạn muốn chuyển đổi từ "không có bộ điều khiển" sang một số bộ điều khiển hoặc ngược lại, phương thức trên sẽ ném một ngoại lệ.

Trường hợp 1: Cả hai bộ điều khiển đều bình đẳng - trong đó bao gồm cả hai đều là vô

  • Không làm gì cả, chúng tôi đã có những gì chúng ta muốn trên màn hình. :-)

Trường hợp 2: Bộ điều khiển cũ là NULL, và bộ điều khiển mới không phải là NULL. Chỉ cần thêm bộ điều khiển mới.

  • Gửi addChildViewController để điều khiển mới - điều này sẽ kích hoạt ngầm willMoveToParentViewController
  • Hãy quan điểm mới kích thước bạn muốn
  • Chèn xem bộ điều khiển con của vào xem hệ thống cấp bậc của bộ điều khiển này: addSubview
  • Thông báo cho điều khiển con rằng nó đã được thêm vào như một đứa trẻ bằng cách gửi nó: didMoveToParentViewController

Trường hợp 3: bộ điều khiển cũ không phải là NULL và bộ điều khiển mới không phải là NULL. Chạy chuyển đổi giữa các bộ điều khiển.

  • Điều chỉnh khung/khung nhìn của chế độ xem mới.
  • Gửi addChildViewController để điều khiển mới - điều này sẽ kích hoạt ngầm willMoveToParentViewController
  • Gửi controller cũ willMoveToParentViewController và vượt qua nó bằng không như phụ huynh mới
  • Thêm subview mới để xem bạn
  • Chạy quá độ tùy chỉnh của bạn giữa cũ và chế độ xem mới sử dụng hoạt ảnh UIView's.
  • Trong hình ảnh đại diện kết thúc hoạt ảnh, hãy gửi didMoveToParentViewController đến bộ điều khiển mới.
  • Xóa chế độ xem của trình điều khiển cũ khỏi trình giám sát của nó.
  • Gửi removeFromParentViewController với bộ điều khiển cũ - điều này sẽ kích hoạt một thứ hữu ích ngầm didMoveToParentViewController
+0

. Cảm ơn bạn đã đào nó ra cho tất cả mọi người :-) – poupou

+0

Tôi thích câu trả lời này, nhưng bạn đang thiếu một trường hợp - đi từ không null đến null. Có lẽ không phải là kịch bản thường xuyên nhất, mặc dù. – RonLugge