Sự khác biệt giữa Modal và Push segue trong Storyboards là gì?


178

Ai đó có thể giải thích cho tôi sự khác biệt chính xác giữa modalpushsegue là gì?

Tôi biết rằng khi chúng ta sử dụng pushsegue được thêm vào một ngăn xếp, vậy khi chúng ta tiếp tục sử dụng pushnó sẽ chiếm bộ nhớ?

Ai đó có thể vui lòng chỉ cho tôi cách thực hiện hai điều này?

Modalsegues có thể được tạo bằng cách đơn giản ctrl-clickvà kéo đến đích nhưng khi tôi làm điều đó với pushứng dụng của tôi gặp sự cố.

Tôi đang đẩy từ một nút để UINavigationControllercó một UIViewController.

Câu trả lời:


174

Một Segue đẩy đang thêm một VC khác vào ngăn xếp điều hướng. Điều này giả định rằng VC tạo ra lực đẩy là một phần của cùng một bộ điều khiển điều hướng mà VC đang được thêm vào ngăn xếp thuộc về. Quản lý bộ nhớ không phải là vấn đề với bộ điều khiển điều hướng và ngăn xếp sâu. Miễn là bạn đang chăm sóc các đối tượng bạn có thể chuyển từ VC này sang VC khác, thời gian chạy sẽ đảm nhiệm ngăn xếp điều hướng. Xem hình ảnh cho một dấu hiệu trực quan: NavStack

Một Segue phương thức chỉ là một VC trình bày một VC khác theo phương thức . Các VC không phải là một phần của bộ điều khiển điều hướng và VC được trình bày theo phương thức thường được coi là "con" của VC trình bày (cha mẹ). Các VC được trình bày một cách thông thường thường sans bất kỳ thanh điều hướng hoặc thanh tab. VC trình bày cũng chịu trách nhiệm loại bỏ VC phương thức mà nó tạo ra và trình bày.

Hi vọng điêu nay co ich.


1
@EIJay cảm ơn lời giải thích tuyệt vời. Một câu hỏi nữa khi nào tôi phải sử dụng phương thức và khi nào nên sử dụng phương pháp đẩy?
Gaurav_soni

43
Nói chung, khi bạn muốn hiển thị chế độ xem chi tiết của chế độ xem tóm tắt, hãy sử dụng bộ điều khiển điều hướng và Phân đoạn đẩy. Nếu chế độ xem "cha mẹ" không thực sự liên quan đến dữ liệu liên quan đến chế độ xem "con", thì hãy sử dụng phương thức. Một ví dụ điển hình cho chế độ xem phương thức sẽ là chế độ xem Đăng nhập. Chế độ xem Đăng nhập không thực sự có bất kỳ mối quan hệ nào liên quan đến dữ liệu liên quan đến chế độ xem "phụ huynh".
LJ Wilson

5
@TJ Có, bạn có thể tạo "chuỗi mô hình". Việc loại bỏ một VC xuống chuỗi sẽ loại bỏ tất cả các VC lên chuỗi - người dùng chỉ nhìn thấy loại bỏ VC hàng đầu (khi bạn bật hình động). Nó giống như bộ điều khiển điều hướng.
Constantino Tsarouhas

3
@jchatard Vâng. Miễn là segue của bạn là phương thức, trong bảng phân cảnh bạn sẽ thấy thanh điều hướng không được kế thừa. Vì vậy, chỉ cần nhấp vào VC đầu tiên của chuỗi phương thức bạn có và sau đó nhấp vào trình đơn Trình chỉnh sửa -> Nhúng vào -> Bộ điều khiển Điều hướng. Điều này sẽ đặt cho bạn một bộ điều khiển điều hướng chung cho tất cả các chuỗi phương thức của bạn. Không phải lúc đó chỉ có phân biệt để hiển thị bộ điều khiển điều hướng là "phương thức", trong khi tất cả các phân biệt bên trong chuỗi phương thức của bạn phải là phân biệt "đẩy".
HpTerm

3
Chỉ có thể sử dụng tính năng đẩy NẾU VC bạn đang sử dụng bộ điều khiển điều hướng. Cố gắng đẩy từ một VC không được nhúng trong bộ điều khiển điều hướng và nó sẽ đưa ra một ngoại lệ. Vì vậy, điều này thực sự không liên quan gì đến việc dữ liệu được kết nối chặt chẽ giữa cha mẹ và con cái, nó chỉ đơn giản là liệu bạn có đang sử dụng bộ điều khiển điều hướng để quản lý VC của mình hay không. Bạn có thể thực hiện chính xác điều tương tự bằng cách sử dụng segues bằng cách sử dụng chuyển đổi phương thức.
smileBot

22

Cập nhật Swift 3.0 và XCode 8.2.1

1. Đẩy phân khúc

Đẩy segue đã được đổi tên thành Hiển thị segue. Để tạo segue đẩy, bộ điều khiển khung nhìn cha cần được nhúng trong bộ điều khiển điều hướng. Bộ điều khiển điều hướng cung cấp thanh điều hướng. Khi bạn kết nối hai bộ điều khiển chế độ xem với bộ đẩy, bộ điều khiển xem con sẽ tự động có thanh điều hướng ở trên cùng. Bộ điều khiển xem con sẽ được thêm vào đầu ngăn xếp điều hướng.

nhập mô tả hình ảnh ở đây

Đẩy segue cũng cung cấp các tính năng mặc định. Trình điều khiển chế độ xem con sẽ có nút quay lại giúp bạn quay lại trình điều khiển chế độ xem chính. Bạn cũng có thể vuốt sang phải để bật trình điều khiển xem con. Hoạt hình cho đẩy segue giống như các trang trượt theo chiều ngang.

nhập mô tả hình ảnh ở đây

Mặc dù bạn được phép tạo một khoảng cách đẩy từ bộ điều khiển xem không có trong bộ điều khiển điều hướng, bạn sẽ mất tất cả các tính năng như thanh điều hướng, hình động, cử chỉ, vv khi bạn làm như vậy. Trong trường hợp này, trước tiên bạn nên nhúng bộ điều khiển chế độ xem cha mẹ của mình bên trong bộ điều khiển chế độ xem điều hướng và sau đó thực hiện đẩy segue sang bộ điều khiển xem con.

nhập mô tả hình ảnh ở đây

2. Phân đoạn phương thức

Mặt khác, một phương thức (tức là hiện tại theo phương thức), mặt khác, đang trình bày trên bộ điều khiển xem hiện tại. Trình điều khiển chế độ xem con sẽ không kế thừa trình điều khiển chế độ xem điều hướng, vì vậy thanh điều hướng sẽ bị mất nếu bạn trình bày phương thức phân tách từ trình điều khiển chế độ xem với trình điều khiển chế độ xem điều hướng. Bạn phải nhúng lại bộ điều khiển xem con trong bộ điều khiển điều hướng và bắt đầu một ngăn điều hướng hoàn toàn mới nếu bạn muốn nó quay lại. Nếu bạn muốn quay lại trình điều khiển xem cha, bạn phải tự thực hiện việc này và gọi dismisstừ mã.

nhập mô tả hình ảnh ở đây

Hoạt ảnh cho phương thức segue là bộ điều khiển xem con sẽ xuất hiện từ cuối trang. Bộ điều khiển xem điều hướng cũng đã biến mất trong bản demo này

nhập mô tả hình ảnh ở đây


6

Quan điểm đẩy phải được xây dựng trong a navigationController.

Bấm vào của bạn master view, sau đó trong thanh menu chọn:

EDITOR->embed in->navigationController

Sai, pushViewcũng có thể được xây dựng KHÔNG CÓ navigationControllervà câu trả lời này là không đầy đủ!
Daksh Gargas

1

Đây là điều khiển đẩy bằng cách sử dụng các phương pháp đẩy và tách tùy chỉnh cho bảng phân cảnh Ban chuyện

Và Modal là cách để điều hướng qua các chế độ xem mà không cần sử dụng Storyboards.


Làm thế nào để tạo segue phương thức mà không cần sử dụng bảng phân cảnh?
jianpx

@jianpx: Bạn chỉ có thể tách biệt khi bạn sử dụng bảng phân cảnh. Nếu không, bạn có thể sử dụng Trình điều khiển điều hướng hoặc PresentModalViewContoder để chuyển đổi giữa các chế độ xem.
Pushkraj

@ Pushkraj cảm ơn. Vì vậy, bạn có nghĩa là không có cách nào để tạo segue bằng mã?
jianpx

@jianpx: Không cần thiết. Phân đoạn chỉ cần khi sử dụng bảng phân cảnh.
Pushkraj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.