実現したいこと
もう少し詳しく言うと、
「スクロールviewの中のStackView内にカスタムviewをコードで生成し、ボタンを押すことでさらにそのカスタムviewを生成する(ボタンを押すことでStackView内にカスタムviewが増えていく)」
これを実現したいです。
現状
・storyboard
・ViewController.swift
・custumViewController.swift
Swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var scrollView: UIScrollView! 6 @IBOutlet weak var stackView: UIStackView! 7 @IBOutlet weak var button: UIButton! 8 9 var custumView = custumViewController() 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 custumView.heightAnchor.constraint(equalToConstant: 300).isActive = true 16 custumView.translatesAutoresizingMaskIntoConstraints = false 17 18 //スタックviewの任意の位置にビューを追加 19 stackView.insertArrangedSubview(custumView, at: 2) 20 //0と1が指定できないのはなぜ 21 } 22 23 @IBAction func buttonAction(_ sender: Any) { 24 25 custumView.heightAnchor.constraint(equalToConstant: 300).isActive = true 26 custumView.translatesAutoresizingMaskIntoConstraints = false 27 28 //スタックviewの任意の位置にビューを追加 29 stackView.insertArrangedSubview(custumView, at: 3) 30 31 } 32 33}
Swift
1 2class custumViewController: UIView { 3 4 //コードから生成したときに通る初期化処理 5 override init(frame: CGRect) { 6 super.init(frame: frame) 7 self.commonInit() 8 } 9 10 //InterfaceBulderで配置した場合に通る初期化処理 11 required init?(coder aDecoder: NSCoder) { 12 super.init(coder: aDecoder) 13 self.commonInit() 14 } 15 16 fileprivate func commonInit() { 17 //MyCustomView.xibファイルからViewを生成する。 18 //File's OwnerはMyCustomViewなのでselfとする。 19 guard let view = UINib(nibName: "fukusuuCustumView", bundle: nil).instantiate(withOwner: self, options: nil).first as? UIView else { 20 return 21 } 22 23 //ここでちゃんとあわせておかないと、配置したUIButtonがタッチイベントを拾えなかったりする。 24 view.frame = self.bounds 25 26 //伸縮するように 27 view.autoresizingMask = [.flexibleHeight, .flexibleWidth] 28 29 //addする。viewオブジェクトの2枚重ねになる。 30 self.addSubview(view) 31 } 32}
簡易的なサンプルを用意しました。
【storyboard】
viewの中にスクロールview、その中にstackviewを置いています。stackviewの中には紫色、水色、黄色のviewを3つ置いています。ピンク色のボタンは、押すたびにカスタムviewを増やす用のボタンです。
【ViewController.swift】
viewDidLoad内で、カスタムviewを生成しています。
ビルドするとこのように緑色のカスタムVeiwがスタックviewの上から3番目に出現します(custumView, at: 2)。
しかしボタンを押すと、下の画像のように、コードで生成したスタックviewが消え、スタックviewの上から4番目にカスタムviewが生成されます。
最終的な質問
**私はボタンからカスタムviewを生成した時に、コードで生成したカスタムviewを消さず残しておきたいです。(ボタンを押した回数分カスタムviewを増やしたい)
**
これを実現するにはどうしたら良いでしょうか?
また、
Swift
1//スタックviewの任意の位置にビューを追加 2 stackView.insertArrangedSubview(custumView, at: 2)
**スタックviewの0番目や1番目に追加しようとしても追加されませんでした。これは何故でしょうか?
**
**お手数ではございますが分かる方、ご回答よろしくお願いいたします。
**
回答1件
あなたの回答
tips
プレビュー