Как создать универсальный контроллер всплывающих окон в быстрой iOS

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

class CustomPopUpViewController: UIViewController{


@IBOutlet weak var vWCustomSubVw: UIView!
@IBOutlet weak var lblHeadingText: UILabel!
@IBOutlet weak var lblDescription: UILabel!
@IBOutlet weak var btnCustom: UIButton!

var strLblHeadingText = String()  // string for heading label
var strLblDescription = String() // string for description label
var strBtnCustom = String()// string for custom button

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.black.withAlphaComponent(0.2)

    self.showAnimate()



    lblHeadingText.text = strLblHeadingText
    lblDescription.text = strLblDescription
    btnCustom .setTitle(strBtnCustom, for: UIControlState.normal)

}

 func showAnimate()
{
    self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
    self.view.alpha = 0.0;
    UIView.animate(withDuration: 0.25, animations: {
        self.view.alpha = 1.0
        self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
    });
}


func removeAnimate()
{
    UIView.animate(withDuration: 0.25, animations: {
        self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
        self.view.alpha = 0.0;
    }, completion:{(finished : Bool)  in
        if (finished)
        {
            self.view.removeFromSuperview()
        }
    });
}


}

и я звоню из другого viewcontroller, как это:-

 func btnInfoTapped(){

    let customPopUpVC = UIStoryboard(name: "Course", bundle: nil).instantiateViewController(withIdentifier: "CustomPopUpViewController") as! CustomPopUpViewController
    self.addChildViewController(customPopUpVC)
    customPopUpVC.view.frame = self.view.frame
    self.view.addSubview(customPopUpVC.view)
    customPopUpVC.didMove(toParentViewController: self)



}

Поэтому я хочу сделать его универсальным, скажем, глобальным методом или чем-то, что вызывает один и тот же класс из разных Viewcontrollers

2 ответа

Вы можете создать общий метод для представления контроллера предупреждений

import Foundation
import UIKit

class AlertHelper: NSObject {

//Alert with title and dismiss button only
static func showAlertWithTitle(_ conroller: UIViewController, title: String, message: String = "" ,dismissButtonTitle: String, dismissAction:@escaping ()->Void) {

    let validationLinkAlert = UIAlertController(title:title, message:message, preferredStyle: .alert)
    let dismissAction = UIAlertAction(title: dismissButtonTitle, style: .default) { (action) -> Void in
        dismissAction()
    }

    validationLinkAlert.addAction(dismissAction)
    conroller.present(validationLinkAlert, animated: true, completion: nil)
}

//Alert with title with message
static func showALertWithTitleAndMessage(_ controller: UIViewController, title: String, message: String, dismissButtonTitle: String, okButtonTitle: String, dismissAction:@escaping ()-> Void, okAction:@escaping ()-> Void) {

    let validationLinkAlert = UIAlertController(title:title, message:message, preferredStyle: .alert)

    let dismissAction = UIAlertAction(title: dismissButtonTitle, style: UIAlertActionStyle.default) { (action) in
        dismissAction()
    }

    let okAction = UIAlertAction(title: okButtonTitle, style: UIAlertActionStyle.default) { (action) in
        okAction()
    }

    validationLinkAlert.addAction(dismissAction)
    validationLinkAlert.addAction(okAction)

    controller.present(validationLinkAlert, animated: true, completion: nil)

}
}

Вызовите эту функцию из вашего Viewcontroller

AlertHelper.showAlertWithTitle(self, title: message, dismissButtonTitle: "OK") { () -> Void in

    }

Я думаю, что этот модуль поможет вам EzPopup ( https://github.com/huynguyencong/EzPopup). Вы можете легко показать свой контроллер представления как всплывающее окно:

// init YourViewController
let contentVC = ...

// Init popup view controller with content is your content view controller
let popupVC = PopupViewController(contentController: contentVC, popupWidth: 100, popupHeight: 200)

// show it by call present(_ , animated:) method from a current UIViewController
present(popupVC, animated: true)
Другие вопросы по тегам