Как правильно отключить модальный режим при использовании раскадровок? - PullRequest
39 голосов
/ 21 февраля 2012

Как правильно расставлять модалы, используя раскадровки?

  • с помощью IBAction и написания кода для закрытия после нажатия кнопки?
  • с помощью segue и уведомить родительский контроллер представления после нажатия кнопки?

Ответы [ 6 ]

24 голосов
/ 21 февраля 2012

См. Здесь Отклонение контроллера представленного представления примерно на полпути вниз

Когда приходит время отклонить представленный контроллер представления, предпочтительный подход состоит в том, чтобы позволить представляющему контроллеру представления отклонить его.

Таким образом, вы должны использовать IBAction и писать код для закрытия после нажатия кнопки

12 голосов
/ 24 февраля 2015

Я обнаружил, что обычно, когда я пытаюсь сделать это в раскадровке, я бы не хотел создавать дополнительные классы. По-прежнему имеет смысл выполнить отклонение от представительного контроллера представления, поэтому для его поддержки требуется класс.

Если вы создаете IBAction в текущем контроллере представления и называете его соответствующим образом, например,

- (IBAction)dismissAnyModel:(id)sender
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

Затем из раскадровки, где бы вы ни хотели инициировать увольнение, вы создаете действие для первого респондента, как показано ниже. Вы можете расширить это для работы с несколькими представлениями контроллеров представления, создав уникальные имена для IBActions.

Create an outlet to first responder

Select correct IBAction

Дополнительная информация о первом респонденте и цепочке респондентов

11 голосов
/ 20 июля 2017

В соответствии с ответом Алекса Чио для Swift 3 и XCode 8.3:

Создать класс:

import UIKit

class DismissSegue: UIStoryboardSegue {
    override func perform() {
        self.source.presentingViewController?.dismiss(animated: true, completion: nil)
   }
}

Но в раскадровке вы должны выбрать:

Действие Segue -> Custom -> dismiss

Только после того, как эта опция появится в Action Segue меню

10 голосов
/ 21 февраля 2012

Смотрите мой ответ здесь .Это дает вам два способа отклонить модальный контроллер представления с раскадровкой.Мне нравится описанный второй метод, потому что когда вы добавляете класс в свой проект, ваш возврат из модальных представлений может быть сделан без кода, используя только раскадровку.Тем не менее, если вы внедрили протокол делегата и делегата, это также хорошее место для размещения оператора dismissModalViewController.

7 голосов
/ 21 декабря 2016

Чтобы сделать это внутри UIStoryboard, вам нужно сначала создать объект типа UIStoryboardSegue в вашем проекте

imageUIStoryboardSegue">

Затем вставитьследующий метод внутри класса.Вот мой класс

@ реализация DismissController

- (void)perform{

    UIViewController *sourceVC = self.sourceViewController;
    [sourceVC.presentingViewController dismissViewControllerAnimated:YES 
                                                          completion:nil]; 
}

Теперь вы можете использовать его внутри UIStoryboard.Выберите кнопку, которая должна вызвать исчезновение UIViewController, и перетащите ее на UIViewController, к которому вы хотите перейти.В моем случае это показывает ** отклонить контроллер * из-за названия моего класса.

enter image description here

Выберите его, и все готово!На этом сайте также есть очень хорошее объяснение .

0 голосов
/ 11 апреля 2015

Как указывает онлайн-документация Apple, контроллер представлений отвечает за отклонение модального (представленного) представления.

Здесь есть сообщение и пример здесь

...