Пользовательский alertViewController в раскадровке - PullRequest
0 голосов
/ 05 июля 2018

Я хотел бы показать всплывающее окно (я имею в виду UIAlertController), как показано на рисунке ниже:

Чего я хочу достичь

enter image description here

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

Есть ли способ, которым я вроде бы делаю отдельное "Нечто" в Storyboard, а затем просто выскакиваю это? Я думал о целом ViewController, но оно охватывает весь экран.

Любые предложения или решения высоко ценятся. ?

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Вам нужно представить его модально, поэтому заставьте VC присвоить ему идентификатор и загрузите его куда угодно

let vc = self.storyboard?.instantiateViewController(withIdentifier: "popupID") as! PopupViewController

vc.sendedStr = "someContent"

vc.myImage = UIImage(named:"flag.png")     

vc.providesPresentationContextTransitionStyle = true;

vc.definesPresentationContext = true;

vc.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext

self.present(vc, animated:true, completion: nil)

//

class PopupViewController : UIViewController {

    var sendedStr:String?

    var myImage:UIImage?      
}

Более важно установить фон представления в IB следующим образом. enter image description here

0 голосов
/ 05 июля 2018

Первый дизайн viewController в storyBoard и имейте в виду, что цвет фона основного представления ViewController должен быть либо прозрачным, либо изменить его альфа на 0.5

Добавить расширение ниже

extension UIViewController {
    open func presentPOPUP(_ viewControllerToPresent: UIViewController, animated flag: Bool, modalTransitionStyle:UIModalTransitionStyle = .coverVertical, completion: (() -> Swift.Void)? = nil) {

        viewControllerToPresent.modalPresentationStyle = .overCurrentContext
        viewControllerToPresent.modalTransitionStyle = modalTransitionStyle

        self.present(viewControllerToPresent, animated: flag, completion: completion)

    }
}

После этого вы можете использовать его, как показано ниже

if let alerVC = self.myStoryBoard.instantiateViewController(withIdentifier: "AlertMessageVC") as? AlertMessageVC {
       self.presentPOPUP(alerVC, animated: true, modalTransitionStyle: .crossDissolve, completion: nil)
}

Вы также можете изменить modalTransitionStyle на параметры ниже

 .coverVertical
 .flipHorizontal
 .crossDissolve
 .partialCurl

Надеюсь, это поможет. :)

0 голосов
/ 05 июля 2018

ViewController Не заполняет весь экран все время. Это просто настройка по умолчанию.

Установите для свойства .modalPresentationStyle вашего дочернего контроллера значение .overCurrentContext и представьте его модально.

Теперь, если вы видите, что у Controller прозрачный фон, он будет представлен как предупреждение.

...