Чистый просмотр контроллера увольнения на iPhone & IPad

Andrew Ebling спросил: 11 марта 2019 в 07:26 в: ios

У меня есть подкласс UIViewController для редактирования сведений об объекте, который помещается в UINavigationController на iPhone.

На iPad это корневой контроллер представления в UINavigationController, представлен с presentationStyle из UIModalPresentationPopover. Другими словами, презентация представляет собой iPhone и модал / поповер на iPad.

Таким образом, презентация выполняется следующим образом:

iPhone:

self.navigationController.pushViewController(detailVC, animated: true)

iPad:


let nc = UINavigationController(rootViewController: detailVC)
nc.modalPresentationStyle = .popover
self.present(nc, animated: true)

Я возвращаюсь к коду, который отклоняет этого контроллера представления; ему нужно открыть навигационный стек на iPhone или отклонить всплывающее окно на iPad.

На данный момент код выглядит следующим образом:

        if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.phone {
            self.navigationController?.popViewController(animated: true)
        } else {
            self.presentingViewController?.dismiss(animated: true, completion: nil)
        }

Но мне это кажется почти наверняка есть более чистое решение - вероятно, вызов API, который делает правильные вещи на обеих платформах, для обоих контекстов, без необходимости переключать поведение в соответствии с особенностями устройства.

Есть ли очиститель / не зависящий от устройства / более идиоматический способ обработки отказа от этого контроллера представления как на iPhone, так и на iPhone; iPad?

Я надеялся, что self.presentingViewController?.dismiss() будет работать в обоих случаях, но это не так.

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


0 ответов