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.
}