参考書を見ながら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