23

sự khác biệt beetween gọi presentModalViewControllerpushViewController, khi là gì:iOS - pushViewController vs presentModalViewController chênh lệch

  • hoạt hình được thiết lập để NO (thậm chí nếu có, đó chỉ là một phong cách hoạt hình có thể thay đổi).
  • một bộ điều khiển chuyển hướng được xác định khi trình bày quan điểm phương thức, vì vậy nó có thể được điều hướng quá, với một chồng gọi, ....

Đây có phải là chỉ để có thể quay trở lại từ đầu đẩy xem ? Woooaaaaaa .....

Tôi đoán sự khác biệt ở nơi khác và sâu hơn. Không?

Trả lời

11

Sự khác biệt quan trọng nhất là về ngữ nghĩa. Các bộ điều khiển chế độ xem thông thường chỉ ra rằng người dùng phải cung cấp một số thông tin hoặc thực hiện điều gì đó. Liên kết này giải thích nó nhiều hơn trong chiều sâu: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

Dưới đây là khác, chênh lệch ít trừu tượng họ nói về:

"Khi bạn trình bày một bộ điều khiển xem phương thức, hệ thống sẽ tạo ra một mối quan hệ cha-con giữa bộ điều khiển điểm cho rằng đã làm Cụ thể, bộ điều khiển khung nhìn đã trình bày cập nhật thuộc tính modalViewController của nó để trỏ tới bộ điều khiển xem (con) được trình bày của nó. bộ điều khiển trình bày nó. "

Cũng xem chủ đề này: why "present modal view controller"?

15

Bỏ qua chuyển/hình ảnh động và cách điều được cấu trúc đằng sau hậu trường (mà aleph_null của alswer cung cấp một cuộc thảo luận tốt), chỉ có sự khác biệt diện người dùng là khả năng để trở về xem trước tự động bằng thanh điều hướng.

Nếu bạn sử dụng pushViewController, bạn sẽ tự động nhận được nút "Quay lại" trong thanh điều hướng. Nếu bạn sử dụng presentModalViewController thì không, và nói chung sẽ phải thực hiện các điều khiển và/hoặc gọi lại của riêng bạn để xử lý việc loại bỏ bộ điều khiển.

Khái niệm phong cách trình bày phương thức thường được sử dụng cho các tác vụ nguyên tử mà bạn không thể điều hướng khỏi (nghĩa là bạn hoàn thành tác vụ hoặc hủy và không thể làm gì khác trong ứng dụng cho đến khi bạn thực hiện tác vụ này) .

Nếu bạn đang tự hỏi lý do tại sao có sự khác biệt ngay từ đầu, tôi không thể nói. Cá nhân tôi nghĩ rằng các khuôn khổ cung cấp một API hợp nhất để di chuyển từ bộ điều khiển này sang bộ điều khiển khác (như cocos2d hoặc Android) có ý nghĩa hơn rất nhiều.

+0

Đây là sự khác biệt quan trọng nhất! –

0

UINavigationController được sử dụng khi bạn muốn có một số loại biểu diễn phân cấp dữ liệu của bạn (ví dụ: xem chi tiết). Họ làm việc bằng cách sử dụng một chồng các lớp con UIViewController. Mỗi khi bạn "đi sâu", bạn chỉ cần thêm một bộ điều khiển chế độ xem khác vào ngăn xếp. Sau đó, logic "trở lại" chỉ đơn giản là một vấn đề của bộ điều khiển xem popping tắt của một ngăn xếp.

Bạn có thể kiểm tra liên kết này: http://www.icodeblog.com/2011/10/11/back-to-basics-an-introduction-to-view-controllers/

1

Đây là những gì kinh nghiệm của tôi cho biết, nếu bạn muốn quản lý một hệ thống các quan điểm, tốt hơn đi cho pushViewController trong điều khiển chuyển hướng.Nó hoạt động giống như một chồng các bộ điều khiển xem trong bộ điều khiển điều hướng. Tuy nhiên, nếu yêu cầu chỉ là hiển thị một khung nhìn về việc thực hiện một số hành động trên bộ điều khiển khung nhìn cha mẹ thì cách tốt nhất là trình bày nó một cách bình thường. Nếu bạn cần một logic push pop phức tạp, bạn luôn thích pushViewController hơn.

1

Hãy xem vào viewControllers trong hình ảnh

  • 2 viewControllers đầu (đăng nhập & nộp) ở phía trên cùng bên trái là bị ngắt kết nối từ tabBarController & NavigationController
  • Phần còn lại của viewControllers được nhúng trong một NavigationController. Chúng bằng cách nào đó thuộc về dòng chảy tự nhiên của ứng dụng.

Bây giờ bạn phải tự hỏi mình

Tôi có cần phải luôn luôn hiển thị đăng nhập + gửi trang mỗi lần? Nó sẽ là đau ở cổ cho người dùng mỗi lần đi đăng nhập ngay cả khi họ đăng nhập lần cuối. Hai màn hình thực sự không phù hợp với dòng chảy tự nhiên của màn hình. Vậy ta phải làm sao? Chúng tôi chỉ cần thêm chúng modally sử dụng presentViewController

Tuy nhiên đối với phần còn lại của viewControllers chúng tôi muốn giữ chúng bên trong 2 hướng vì vậy chúng tôi có thể dễ dàng đi lui vì vậy chúng tôi sử dụng pushViewController

enter image description here

Đối biết thêm thông tin Tôi khuyên bạn nên xem ảnh này video Hình ảnh cũng được chọn từ this câu trả lời hay. Nó xứng đáng với một cái nhìn.