Представление контроллера представления модально - PullRequest
0 голосов
/ 24 ноября 2018

У меня проблемы с использованием View Controller модально для входа на страницу.Я могу заставить контроллер появляться, но я не могу изменить его в полном размере.

Я пытаюсь представить поповер в центре экрана с блеклым фоном.Всплывающее окно должно отклоняться, когда я нажимаю за пределами вида.

Я просмотрел вопросы и ответы по всему сайту и не нашел подходящего мне.

Вот код, который у меня есть:

import UIKit

class SignInView: UIViewController, UIPopoverPresentationControllerDelegate {


override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "popoverSegue" {

    var popover = segue.destination as! SignInPopView
    popover.popoverPresentationController!.delegate = self
    popover.modalPresentationStyle = UIModalPresentationStyle.popover
    popover.preferredContentSize = CGSize(width: 375, height: 500)

    }

}

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

Этот ответ сработал для меня: https://stackoverflow.com/a/46518387/640588

class CommonViewController: UIViewController, UIPopoverPresentationControllerDelegate{

func adaptivePresentationStyle(
for controller: UIPresentationController,
    traitCollection: UITraitCollection)
    -> UIModalPresentationStyle {
        return .none
}

func showPopover(){
    let storyboard = UIStoryboard(name: "Pickers", bundle: nil)
    let myViewController = UIViewController()
    myViewController.preferredContentSize = CGSize(width: 320, height: 200)
    myViewController.modalPresentationStyle = .popover

    let popOver = myViewController.popoverPresentationController
    popOver?.delegate = self

    self.present(myViewController, animated: true, completion: nil)
    popOver?.permittedArrowDirections = .init(rawValue: 0)
    popOver?.sourceView = self.view

    let rect = CGRect(
        origin: CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/2),
        size: CGSize(width: 1, height: 1)
    )
    popOver?.sourceRect = rect
}
0 голосов
/ 25 ноября 2018

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

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

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

Это видео было полезно: https://www.youtube.com/watch?v=S5i8n_bqblE

Редактировать: Это Обнаружение любого касания за пределами текущего вида предоставило решение для отмены модального режима при касании за пределами вида.

0 голосов
/ 24 ноября 2018

Чтобы ваш контроллер представления отображался как всплывающее окно, вы должны установить следующее:

popupVC.modalPresentationStyle = .OverCurrentContext

popupVC.modalTransitionStyle = .CrossDissolve

А также спроектируйте положение и размер контроллера вида, чтобы он выглядел как всплывающее окно.Также вы можете использовать EzPopup . Это хороший модуль. Я использую EzPopup, и он работал для меня

...