Используя раскадровки, что является правильным способом отклонить модальный?
- с помощью IBAction и написания кода для увольнения после нажатия кнопки?
- используя segue и уведомляйте родительский контроллер представления после нажатия кнопки?
Используя раскадровки, что является правильным способом отклонить модальный?
См. здесь Отклонение представленного контроллера просмотра примерно на полпути
Когда приходит время отклонить представленный контроллер представлений, предпочтительный подход - позволить диспетчеру представления представления отклонить его.
Итак, вы должны использовать IBAction и писать код для увольнения после нажатия кнопки
Смотрите мой ответ здесь. Это дает вам два способа отклонить контроллер модального просмотра с помощью раскадровки. Мне нравится описанный метод, потому что вы добавляете класс в свой проект, а ваше возвращение из модальных представлений может быть выполнено без кода, использующего только раскадровку. Тем не менее, если вы внедрили делегат и делегировать протокол, это также хорошее место для установки оператора rejectModalViewController.
Я обнаружил, что обычно, когда я пытаюсь сделать это в раскадровке, я бы предпочел не создавать дополнительные классы. По-прежнему имеет смысл выполнить увольнение с контроллера представления, поэтому для него требуется класс.
Если вы создаете IBAction в представлении контроллера представления и назовите его соответствующим образом, например.
- (IBAction)dismissAnyModel:(id)sender
{
[self dismissViewControllerAnimated:YES completion:nil];
}
Затем из раскадровки, где вы хотите вызвать увольнение, создайте действие для первого ответчика, как показано ниже. Вы можете расширить его, чтобы работать с несколькими презентационными контроллерами представлений, создавая уникальные имена для IBActions.
Дополнительная информация о первом ответчике и цепочке ответчиков
Чтобы сделать это внутри UIStoryboard
, вам нужно сначала создать объект типа UIStoryboardSegue
в вашем проекте
Затем вставьте следующий метод внутри класса. Вот мой класс
@implementation DismissController
- (void)perform{
UIViewController *sourceVC = self.sourceViewController;
[sourceVC.presentingViewController dismissViewControllerAnimated:YES
completion:nil];
}
Теперь вы можете использовать его внутри своего UIStoryboard
. Выберите кнопку, которая должна сделать UIViewController
Disappear и перетащите ее в UIViewController
, к которой вы хотите перейти. В моем случае это показывает ** убрать Controller * из-за имени моего класса.
Выберите его, и все готово! Существует также очень хорошее объяснение на этом веб-сайте.
По ответам Alex Cio на Swift 3
и XCode 8.3
:
Создать класс:
import UIKit
class DismissSegue: UIStoryboardSegue {
override func perform() {
self.source.presentingViewController?.dismiss(animated: true, completion: nil)
}
}
Но в раскадровке вы должны выбрать:
Действие Segue → Custom → отклонение
Только после того, как эта опция появится в меню Action Segue
Как показывает онлайн-документация Apple, диспетчер представления представления отвечает за отклонение модального (представленного) представления.
Там есть сообщение и пример здесь