1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-06-23

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?