Яка різниця між модальним та наштовхнутим мовком у розгортках?


179

Чи може хтось мені пояснити, в чому полягає точна різниця між modalта pushвідомістю?

Я знаю, що коли ми використовуємо pushsegue, він додається до стека, тож коли ми продовжуємо pushйого використовувати, він продовжує займати пам'ять?

Може хтось, будь ласка, покаже мені, як ці два реалізовані?

Modalсеги можна створити просто ctrl-clickі перетягнувши до місця призначення, але коли я це роблю, коли pushмоє додаток виходить з ладу.

Я натискаю кнопку від того, UINavigationControllerщо має UIViewController.

Відповіді:


174

Поштовх Segue додає інший VC до навігації стека. Це передбачає, що VC, який започатковує push, є частиною того ж контролера навігації, якому належить VC, який додається до стеку. Управління пам'яттю не є проблемою з навігаційними контролерами та глибоким стеком. Поки ви піклуєтесь про об’єкти, які можуть переходити від одного ВК до іншого, час виконання буде дбати про навігаційний стек. Візуальну індикацію див. На зображенні: NavStack

Модальний Segue тільки один VC представляючи інший VC модально. ДК не повинні бути частиною навігаційного контролера, а ВК, представлений в модульному режимі, як правило, вважається "дочірнім" представлення (батьківського) ВК. Модально представлений VC, як правило, не містить будь-яких навігаційних панелей або панелей вкладок. Представляючий ВК також відповідає за відхилення створеного та представленого модульного ВК.

Сподіваюся, це допомагає.


1
@EIJay дякую за велике пояснення. Ще одне питання, коли мені потрібно користуватися модальним способом і коли використовувати push-segue?
Gaurav_soni

43
Як правило, коли ви хочете показати детальний вид зведеного перегляду, використовуйте контролер навігації та натисніть Segues. Якщо подання "батьків" насправді не стосується даних, що стосуються перегляду "дочірня", тоді використовуйте модальний режим. Хорошим прикладом для модального перегляду буде подання для входу. Перегляд "Вхід" насправді не має жодного відношення, що стосується даних "батьківського" подання.
LJ Wilson

5
@TJ Так, ви можете створити "модельні ланцюги". Відхилення ВК вниз по ланцюгу відхиляє всі ЦЗ вгору по ланцюгу - користувач бачить лише відхилення ВК-вершини (коли ви активуєте анімацію). Це як навігаційні контролери.
Константіно Царухас

3
@jchatard Так. Поки ваш модник модальний, у розгортці ви побачите, що панель навігації не успадковується. Тому просто натисніть на перший ЦК модального ланцюга, який у вас є, а потім натисніть меню Редактор -> Вставити -> Контролер навігації. Це встановить вам навігаційний контролер, який буде загальним для всіх ваших модальних ланцюгів. Не те, що в цей момент тільки мозок для відображення навігаційного контролера є "модальним", тоді як всі шейки всередині вас модального ланцюга повинні бути "натисканнями".
HpTerm

3
Натисканням можна користуватися лише в тому випадку, якщо ВК, який ви переглядаєте, використовує контролер навігації. Спробуйте натиснути на ЦЗ, який не вбудований в навігаційний контролер, і це викине виняток. Отже, це насправді не має нічого спільного з тим, наскільки тісно пов’язані дані між батьком і дитиною, це просто пов’язано з тим, чи використовуєте ви управління навігаційним контролером для управління вашими ВК. Ви можете зробити те ж саме вручну, використовуючи модні переходи, використовуючи модальні переходи.
усмішкаБот

22

Оновлення Swift 3.0 та XCode 8.2.1

1. Push Segue

Push segue було перейменовано як Show segue. Щоб створити push-segue, батьківський контролер подання повинен бути вбудований у контролер навігації. Навігаційний контролер забезпечує панель навігації. Після того, як ви підключите два контролери перегляду за допомогою націленого каналу, дочірній контролер автоматично матиме панель навігації зверху. Контролер дочірнього виду буде доданий поверх навігаційного стеку.

введіть тут опис зображення

Push segue також надає функції за замовчуванням. Контролер дочірнього перегляду матиме кнопку назад, яка поверне вас до батьківського контролера подання. Ви також можете провести пальцем праворуч, щоб перейти до контролера дитячого перегляду. Анімація для push-Segue - це як ковзання сторінок по горизонталі.

введіть тут опис зображення

У той час як вам дозволяється зробити натискання на контролер перегляду, який не знаходиться в контролері навігації, ви втратите всі функції, такі як панель навігації, анімація, жести тощо. У такому випадку слід спочатку вставити батьківський контролер подання у контролер перегляду навігації, а потім зробити натиск на контролери дочірнього виду.

введіть тут опис зображення

2. Модальний Segue

З іншого боку, модальний segue (тобто присутній модально) є над контролером поточного перегляду. Контролер дочірнього перегляду не успадковує контролер перегляду навігації, тому навігаційна панель буде втрачена, якщо ви представите модальний вигляд з контролера подання та з контролером перегляду навігації. Вам потрібно знову вставити контролер подання даних у контролер навігації та запустити абсолютно новий навігаційний стек, якщо його потрібно повернути. Якщо ви хочете повернутися до контролера батьківського перегляду, вам доведеться реалізувати це самостійно і зателефонувати dismissз коду.

введіть тут опис зображення

Анімація для модальної розвідки полягає в тому, що контролер дитячого перегляду з’явиться внизу сторінки. Контролер подання навігації також відсутній у цій демонстраційній версії

введіть тут опис зображення


6

Погляд "push" повинен бути вбудований у a navigationController.

Клацніть на вашому master view, а потім на панелі меню виберіть:

EDITOR->embed in->navigationController

Неправильно, pushViewтакож можна побудувати БЕЗ, navigationControllerі ця відповідь неповна!
Дакш Гаргас

1

Це натискання елементів керування за допомогою спеціальних методів натискання та випромінювання для раскадровки Рада історії

І Modal - це спосіб орієнтуватися в переглядах, не використовуючи Сценарії.


Як створити модальний segue без використання раскадров?
jianpx

@jianpx: Ви можете заперечувати лише тоді, коли використовуєте мовленнєві дошки. В іншому випадку ви можете використовувати навігаційний контролер або PresentModalViewController для перемикання між переглядами.
Pushkraj

@ Pushkraj спасибі Отже, ви маєте на увазі, що немає способу створити segue за кодом?
jianpx

@jianpx: Не потрібно. Segue потрібен лише під час використання раскадров.
Пушкрай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.