0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Popoverをソースコードで出現させる(iOS編)

Last updated at Posted at 2024-08-12

Storyboardを使えば簡単だが、こんな時はどうする!?

image.png

こんな感じで、Storyboardを使えば簡単にポップオーバーが実現できます。

良いUIかどうかの議論は別として、状況によってポップオーバーする内容を変えたい場合があったとします。
Storyboardではボタン1つに対して、1つのポップオーバーしか指定できません。

このような場合は、ソースコードで状況に応じたポップオーバーはどれかを判断し、用意しておいた複数のStoryboardからオブジェクトを生成して表示するというのが現実的でしょう。

二つのStoryboardを用意する

CSettingCSubSettingという二つのStoryboardを用意しました。
スクリーンショット 2024-08-12 9.47.32.png
この2つのStoryboardをソースコードで状況を判断し、その状況に応じて表示します。
Sub SettingのスイッチがONの時はCSubSettingViewを採用します。
Sub SettingのスイッチがOFFの時はCSettingViewを採用します。

extension ViewController {
    @IBAction func settingButton(_ sender: Any) {
        let vc: UIViewController
        
        if subSettingSw.isOn {
            vc = UIStoryboard(name: "CSubSettingView", bundle: nil).instantiateInitialViewController()!
        } else {
            vc = UIStoryboard(name: "CSettingView", bundle: nil).instantiateInitialViewController()!
        }
        vc.modalPresentationStyle = .popover
        vc.popoverPresentationController?.sourceView = (sender as! UIButton).superview
        vc.popoverPresentationController?.sourceRect = (sender as! UIButton).frame
        
        present(vc, animated: true)
    }
}

UIViewControllerをStoryboardから取得し、UIViewControllerのプロパティを必要に応じて設定します。
あとはpresetntメソッドで表示します。
image.png
こんな感じで、スイッチの状態に応じて表示するPopoverを変えることができました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?