Ios Storyboarding - Увольнение модального?
Используя раскадровки, что является правильным способом отклонить модальный?
- с помощью IBAction и написания кода для увольнения после нажатия кнопки?
- используя segue и уведомляйте родительский контроллер представления после нажатия кнопки?
Ответы
Ответ 1
См. здесь Отклонение представленного контроллера просмотра примерно на полпути
Когда приходит время отклонить представленный контроллер представлений, предпочтительный подход - позволить диспетчеру представления представления отклонить его.
Итак, вы должны использовать IBAction и писать код для увольнения после нажатия кнопки
Ответ 2
Смотрите мой ответ здесь. Это дает вам два способа отклонить контроллер модального просмотра с помощью раскадровки. Мне нравится описанный метод, потому что вы добавляете класс в свой проект, а ваше возвращение из модальных представлений может быть выполнено без кода, использующего только раскадровку. Тем не менее, если вы внедрили делегат и делегировать протокол, это также хорошее место для установки оператора rejectModalViewController.
Ответ 3
Я обнаружил, что обычно, когда я пытаюсь сделать это в раскадровке, я бы предпочел не создавать дополнительные классы. По-прежнему имеет смысл выполнить увольнение с контроллера представления, поэтому для него требуется класс.
Если вы создаете IBAction в представлении контроллера представления и назовите его соответствующим образом, например.
- (IBAction)dismissAnyModel:(id)sender
{
[self dismissViewControllerAnimated:YES completion:nil];
}
Затем из раскадровки, где вы хотите вызвать увольнение, создайте действие для первого ответчика, как показано ниже. Вы можете расширить его, чтобы работать с несколькими презентационными контроллерами представлений, создавая уникальные имена для IBActions.
![Create an outlet to first responder]()
![Select correct IBAction]()
Дополнительная информация о первом ответчике и цепочке ответчиков
Ответ 4
Чтобы сделать это внутри UIStoryboard
, вам нужно сначала создать объект типа UIStoryboardSegue
в вашем проекте
![Создание нового класса типа <code> UIStoryboardSegue </code>]()
Затем вставьте следующий метод внутри класса. Вот мой класс
@implementation DismissController
- (void)perform{
UIViewController *sourceVC = self.sourceViewController;
[sourceVC.presentingViewController dismissViewControllerAnimated:YES
completion:nil];
}
Теперь вы можете использовать его внутри своего UIStoryboard
. Выберите кнопку, которая должна сделать UIViewController
Disappear и перетащите ее в UIViewController
, к которой вы хотите перейти. В моем случае это показывает ** убрать Controller * из-за имени моего класса.
![введите описание изображения здесь]()
Выберите его, и все готово!
Существует также очень хорошее объяснение на этом веб-сайте.
Ответ 5
По ответам 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
Ответ 6
Как показывает онлайн-документация Apple, диспетчер представления представления отвечает за отклонение модального (представленного) представления.
Там есть сообщение и пример
здесь