【swift4】自作でポップアップを作成してみた。

 

ポップアップだったり、アラートを表示したい場合はswiftが用意してくれてるやつとかライブラリとかあると思うんですけど

実際に自分で作って見たので使って見たい人いたらコピペで使ってみてね。コード汚いけど。

 

swfit4でポップアップウィンドウを作成

 

viewControllerとポップアップで構成されています。

まずはviewcontrollerでボタンとUIViewを作成。 

これがViewController.swift

class ViewController: UIViewController {

    var popupViewController = PopupViewController()
    var popupBtn = UIButton()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        addChildViewController(popupViewController)
        popupViewController.didMove(toParentViewController: self)
        
        // 押されたときにポップアップを表示するボタンを作成。
        self.popupBtn.backgroundColor = UIColor.red
        self.popupBtn.frame = CGRect(x: 0, y: 100, width: 100, height: 50)
        self.popupBtn.setTitle("popup", for: .normal)
        self.popupBtn.addTarget(self, action: #selector(self.popup(_:)), for: .touchUpInside)
        self.view.addSubview(self.popupBtn)
    }

    // ボタンが押されたときにaddSubviewする。
    @objc func popup(_ sender: Any) {
        view.addSubview(popupViewController.view)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

popupViewController.swiftを作成

class PopupViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let screenWidth:CGFloat = self.view.frame.width
        let screenHeight:CGFloat = self.view.frame.height
        
        let popupWidth = (screenWidth * 3)/4
        let popupHeight = (screenWidth * 4)/5

        // uiviewの作成 ポップアップ
        let testUIView = UIView()
        testUIView.frame = CGRect(
            x:screenWidth/8,
            y:screenHeight/5,
            width:popupWidth,
            height:popupHeight
        )
        testUIView.backgroundColor = UIColor.white
        testUIView.layer.cornerRadius = 10
        
        self.view.addSubview(testUIView)
        
        // 画面のどこかがタップされたらポップアップを消す処理
        let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(
            target: self,
            action: #selector(self.tapped(_:)))
        
        // デリゲートをセット
        tapGesture.delegate = self as? UIGestureRecognizerDelegate
        
        self.view.addGestureRecognizer(tapGesture)
        
        // ポップアップ以外のところを半透明のグレーに。
        self.view.backgroundColor = UIColor(
            red: 150/255,
            green: 150/255,
            blue: 150/255,
            alpha: 0.6
        )
    }

    // どこかタップされたときポップアップを消し去る関数
    @objc func tapped(_ sender: UITapGestureRecognizer){
        self.view.removeFromSuperview()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

 

この中のUIviewとかにlabelやtextFieldを追加してけば、いろいろ作れるはずです!

 

以上!

 

じゃーの