X code :ボタンを押すとpopupして、画面にLabelとButtonを設置する


https://logist3.com/swift-popup/
のMiyazakiさんの記事

https://i-app-tec.com/ios/uilable-utilites.html
の豪徳寺 謙さんの記事

を組み合わせました。


親画面のボタンを押すとpopup（ポップアップ）して、画面にLabel（ラベル）とButton（ボタン）を設置します。
popup画面のButtonを押すとサイトが開きます。

1  まず親画面。class ViewController です。
親画面のボタンはInterface Builderを使って　touch up insideでつなぎます


import UIKit

class ViewController: UIViewController {
    var popupViewController = PopupViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
       
        addChild(popupViewController)
        popupViewController.didMove(toParent: self)

    }
    
    @IBAction func popupBtn(_ sender: Any) {
     view.addSubview(popupViewController.view)}
}


2 popup画面のclassを新たに作成。class PopupViewController です。
ボタンを押すとグーグルのトップページが開きます。
（//  self.view.sendSubviewToBack(testUIView) を入れる前はボタンが
popup画面の後ろに隠れてしまっていましたので追加しました。）



import Foundation
import UIKit
class PopupViewController: UIViewController {
    
    
    //ポップアップがめん内にボタンを設置。
    var addressBtn = UIButton()
    //ポップアップがめん内にラベルを設置。
    var nameLabel = UILabel()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // ボタンを作成。
        self.addressBtn.backgroundColor = UIColor.blue
        self.addressBtn.frame = CGRect(x: 0, y: 200, width: 100, height: 50)
        self.addressBtn.setTitle("ホームページ", for: .normal)
        self.addressBtn.addTarget(self, action: #selector(self.openSafari(_:)), for: .touchUpInside)
        self.view.addSubview(self.addressBtn)
        
        
        
        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)

        //URLを導く「ボタン」をポップアップの前側に表示する
        self.view.sendSubviewToBack(testUIView)
        
        // ラベルを作成
        self.nameLabel.frame = CGRect(x:150, y:200, width:160, height:30)
        self.nameLabel.text = "テスト"
        self.view.addSubview(nameLabel)
       //画面のどこかがタップされたらポップアップを消す処理
        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
        )
    }
    // ボタンが押されたときにsafariを開く。
    @objc func openSafari(_ sender: Any) {
        let url = URL(string: "http://google.com")
        
        if(UIApplication.shared.canOpenURL(url!)){
            UIApplication.shared.openURL(url!)
        }
    }
    // どこかタップされたときポップアップを消し去る関数
    @objc func tapped(_ sender: UITapGestureRecognizer){
        self.view.removeFromSuperview()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
}
![fullsizeoutput_4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/443223/a7b8e8bb-52e1-3586-2188-b074a9903ebb.jpeg)