質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1295閲覧

コンテナビューのEmbed先をコードから変更できますか?

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2018/08/14 13:14

編集2018/08/14 22:00

いつもお世話になります。

containerViewを利用して、貼り付けたGIFのように見た目上は希望する動きを実現できたのですが、
アプリ起動時にすべてのViewControllerが読み込まれるのに違和感を感じています。
見た目の動きは現状のままで、segmentControlで選択したViewのViewControllerだけ読み込まれるといったように
画面遷移させたいのですが、何を利用してつくったらよいかイメージが浮かばず困っています。なにかよい方法?組み合わせはないでしょうか?

追記
現状、コードからEmbed先を変更する方向で勧めています。

イメージ説明

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 // Mark: - Outlets/ContainerView - 6 @IBOutlet weak var containerView: UIView! 7 @IBOutlet weak var blueContainerView: UIView! 8 @IBOutlet weak var greenContainerView: UIView! 9 @IBOutlet weak var yellowContainerView: UIView! 10 var containersArray = [UIView]() 11 12 // Mark: - Outlets/UIButton - 13 @IBOutlet weak var chengeSelectSwViewAppearanceBtn: UIButton! 14 @IBOutlet weak var changeSwSC: UISegmentedControl! 15 // Mark: - Outlets/Constraints - 16 @IBOutlet weak var selectSwViewAppear: NSLayoutConstraint! 17 @IBOutlet weak var selectSwViewDisappear: NSLayoutConstraint! 18 19 // Mark: - LifeCycle - 20 override func viewDidLoad() { 21 super.viewDidLoad() 22 containersArray = [blueContainerView, greenContainerView, yellowContainerView] 23 containerView.bringSubview(toFront: blueContainerView) 24 } 25 26 override func didReceiveMemoryWarning() { 27 super.didReceiveMemoryWarning() 28 // Dispose of any resources that can be recreated. 29 } 30 31 // Mark: - Action/SegmentControl - 32 @IBAction func selectVcSegmentControlTapped(_ sender: UISegmentedControl) { 33 switch sender.selectedSegmentIndex { 34 case 0 : containerView.bringSubview(toFront: blueContainerView) 35 case 1 : containerView.bringSubview(toFront: greenContainerView) 36 case 2 : containerView.bringSubview(toFront: yellowContainerView) 37 default: break 38 } 39 changeApperanceOfSCView() 40 } 41 42 // Mark: - Action/BtnTapped - 43 44 @IBAction func chengeSelectSwViewAppearanceBtnTapped(_ sender: UIButton) { 45 changeApperanceOfSCView() 46 } 47 48 func changeApperanceOfSCView() { 49 if selectSwViewAppear.isActive == true { 50 selectSwViewAppear.isActive = false 51 selectSwViewDisappear.isActive = true 52 chengeSelectSwViewAppearanceBtn.setTitle("▼", for: .normal) 53 } else { 54 selectSwViewDisappear.isActive = false 55 selectSwViewAppear.isActive = true 56 chengeSelectSwViewAppearanceBtn.setTitle("▲", for: .normal) 57 } 58 UIView.animate(withDuration: 0.5, animations: { self.view.layoutIfNeeded() }, completion: nil) 59 } 60 61 // MARK: - Segue - 62 63}

イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

storyboardを分割して、コード上から、既表示のViewControllerをremove、segmentedControlで選択されたViewControllerを、addSubviewするように変更。

とりあえず動くことは確認できたので解決済みに変更。

↓動きを確認したコピペコード

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 // Mark: - Outlets/ContainerView - 6 @IBOutlet weak var containerView: UIView! 7 @IBOutlet weak var blueContainerView: UIView! 8 @IBOutlet weak var greenContainerView: UIView! 9 @IBOutlet weak var yellowContainerView: UIView! 10 //var containersArray = [UIView]() 11 12 // Mark: - Outlets/UIButton - 13 @IBOutlet weak var chengeSelectSwViewAppearanceBtn: UIButton! 14 @IBOutlet weak var changeSwSC: UISegmentedControl! 15 // Mark: - Outlets/Constraints - 16 @IBOutlet weak var selectSwViewAppear: NSLayoutConstraint! 17 @IBOutlet weak var selectSwViewDisappear: NSLayoutConstraint! 18 19 //var presentContainerView: Int = 0 20 21 var blueController: BlueViewController? 22 var greenController: GreenViewController? 23 var yellowController: YellowViewController? 24 25 26 // Mark: - LifeCycle - 27 override func viewDidLoad() { 28 super.viewDidLoad() 29 30 blueController = createViewController(SCIndex: 0, containerTitle: "Blue") as? BlueViewController 31 displayContentController(content: blueController!, container: containerView) 32 33 } 34 35 override func didReceiveMemoryWarning() { 36 super.didReceiveMemoryWarning() 37 // Dispose of any resources that can be recreated. 38 } 39 40 func createViewController(SCIndex: Int, containerTitle: String) -> UIViewController { 41 var returnController: UIViewController? 42 switch SCIndex { 43 case 0: 44 let sb: UIStoryboard = UIStoryboard(name: "BlueViewController", bundle: nil) 45 let controller: BlueViewController = 46 sb.instantiateInitialViewController() as! BlueViewController 47 controller.containerTitle = containerTitle 48 returnController = controller 49 case 1: 50 let sb: UIStoryboard = UIStoryboard(name: "GreenViewController", bundle: nil) 51 let controller: GreenViewController = 52 sb.instantiateInitialViewController() as! GreenViewController 53 controller.containerTitle = containerTitle 54 returnController = controller 55 case 2: 56 let sb: UIStoryboard = UIStoryboard(name: "YellowViewController", bundle: nil) 57 let controller: YellowViewController = 58 sb.instantiateInitialViewController() as! YellowViewController 59 controller.containerTitle = containerTitle 60 returnController = controller 61 default: break 62 } 63 return returnController! 64 } 65 66 67 func displayContentController(content: UIViewController, container: UIView) { 68 addChildViewController(content) 69 content.view.frame = container.bounds 70 container.addSubview(content.view) 71 content.didMove(toParentViewController: self) 72 } 73 74 func hideContentController(content: UIViewController) { 75 content.willMove(toParentViewController: self) 76 content.view.removeFromSuperview() 77 content.removeFromParentViewController() 78 } 79 80 /* 81 func hideContentController() { 82 var content: UIViewController? 83 switch presentContainerView { 84 case 0: content = blueController! 85 case 1: content = greenController! 86 case 2: content = yellowController! 87 default: break 88 } 89 content?.willMove(toParentViewController: self) 90 content?.view.removeFromSuperview() 91 content?.removeFromParentViewController() 92 } 93 */ 94 95 // Mark: - Action/SegmentControl - 96 @IBAction func selectVcSegmentControlTapped(_ sender: UISegmentedControl) { 97 98 hideContentController(content: childViewControllers.first!) 99 100 print(childViewControllers) 101 if let topController = UIApplication.topViewController() { 102 print("topController:",topController) 103 } 104 105 switch sender.selectedSegmentIndex { 106 case 0 : //containerView.bringSubview(toFront: blueContainerView) 107 //hideContentController() 108 blueController = createViewController(SCIndex: 0, containerTitle: "Blue") as? BlueViewController 109 displayContentController(content: blueController!, container: containerView) 110 case 1 : //containerView.bringSubview(toFront: greenContainerView) 111 //hideContentController() 112 greenController = createViewController(SCIndex: 1, containerTitle: "Green") as? GreenViewController 113 displayContentController(content: greenController!, container: containerView) 114 case 2 : //containerView.bringSubview(toFront: yellowContainerView) 115 //hideContentController() 116 yellowController = createViewController(SCIndex: 2, containerTitle: "Yellow") as? YellowViewController 117 displayContentController(content: yellowController!, container: containerView) 118 default: break 119 } 120 //presentContainerView = sender.selectedSegmentIndex 121 changeApperanceOfSCView() 122 } 123 124 // Mark: - Action/BtnTapped - 125 126 @IBAction func chengeSelectSwViewAppearanceBtnTapped(_ sender: UIButton) { 127 changeApperanceOfSCView() 128 } 129 130 func changeApperanceOfSCView() { 131 if selectSwViewAppear.isActive == true { 132 selectSwViewAppear.isActive = false 133 selectSwViewDisappear.isActive = true 134 chengeSelectSwViewAppearanceBtn.setTitle("▼", for: .normal) 135 } else { 136 selectSwViewDisappear.isActive = false 137 selectSwViewAppear.isActive = true 138 chengeSelectSwViewAppearanceBtn.setTitle("▲", for: .normal) 139 } 140 UIView.animate(withDuration: 0.5, animations: { self.view.layoutIfNeeded() }, completion: nil) 141 } 142 143 // MARK: - Segue - 144 145}

投稿2018/08/14 21:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問