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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

1回答

2637閲覧

【iOS】ContainerViewでViewControllerを再利用する方法

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2017/03/31 09:04

参考書を見ながらiOSアプリをはじめて開発しています。
僕の知識レベル(参考書で基礎を学んだ程度)では、解決できない壁にぶち当たり、解決方法を自分でも色々調べたりしましたが解決できなかったので、なにか少しでも助言いただけますと幸いです。

#####実現したいこと
1画面として独立しているViewController2を再利用して、ViewController1のContainerViewの中に同じ内容を表示したい。

#####やったこと
以下イメージのように大きく2つの画面を用意し、ViewController1の中にContainerViewを配置し、その中にViewController2で表示している時刻を同じように表示しようとしました。
画面遷移や時刻を表示することはできました。

イメージ説明

ViewController1

Swift

1import UIKit 2 3class ViewController1: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 } 9 10 override func didReceiveMemoryWarning() { 11 super.didReceiveMemoryWarning() 12 // Dispose of any resources that can be recreated. 13 } 14 15 @IBAction func touchUpInside(_ sender: Any) { 16 performSegue(withIdentifier: "showView2", sender: nil) 17 } 18 19 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 20 if segue.identifier == "showView2" { 21 let vc2 = segue.destination as! ViewController2 22 vc2.now = Date() 23 } 24 } 25 26}

ViewController2

Swift

1import UIKit 2 3class ViewController2: UIViewController { 4 5 @IBOutlet weak var lblNow: UILabel!//ViewController2表示用 6 @IBOutlet weak var lblNow2: UILabel!//ViewController1のContainerView表示用 7 8 var now: Date? 9 let formatter = DateFormatter() 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // Do any additional setup after loading the view. 15 guard let now = self.now else { 16 return 17 } 18 19 formatter.locale = Locale(identifier: "ja_JP") 20 formatter.dateFormat = "yyyy/MM/dd HH:mm:ss" 21 lblNow.text = formatter.string(from: now) 22 } 23 24 override func didReceiveMemoryWarning() { 25 super.didReceiveMemoryWarning() 26 // Dispose of any resources that can be recreated. 27 } 28 29}

#####問題・困っていること
ViewController2自体は再利用できたが、同じ内容を表示するのに、その中の部品が再利用できず冗長に感じています。

ViewController2のソースの通り、時刻表示用のラベルを2つ定義しています。用途は、ViewController1のContainerView用とViewController2用です。

@IBOutlet weak var lblNow: UILabel!
@IBOutlet weak var lblNow2: UILabel!

これを1つのラベルにして、ViewController1とViewController2で使いまわせないでしょうか?
ご回答よろしくお願いします。

#####環境
Swift3
Xcode8

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

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

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

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

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

fuzzball

2017/04/05 05:54

lblNow2は使われていないようですが‥?
guest

回答1

0

2つのViewControllerのUILabelを、両方ともlblNowに繋げばいいんじゃないでしょうか?

それよりも、遷移用のViewController2(右側)を作らなくても、Containerに繋いでいるViewController2(下側)に対して遷移すればいいんじゃないかと。

投稿2017/04/05 06:02

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問