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

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

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

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

Q&A

解決済

2回答

853閲覧

swift UIButtonをタップ時に別ファイルにaddSubViewを行いたい。

mimizuku123

総合スコア12

Swift

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

0グッド

0クリップ

投稿2020/02/21 12:40

前提・実現したいこと

view1.swiftのコードから
ViewController.swiftのviewにaddSubview()を行おうとしています。

ViewController.swiftのコードでaddSubview()を行う場合は、
self.view.addSubView()と入力すれば追加されることは理解しているのですが、

view1.swiftのコードでaddSubview()を行う場合、
self.view.addSubview()のself.viewの部分をどう変えればよろしいでしょうか?

初歩的な質問かつ、分かりにくい質問で申し訳ないのですが
自分ではうまく検索することができず、ご教示いただけると幸いです。

試したこと

1つ目

swift

1view1.swift内 2 3 @IBAction func AddButtonTap(_ sender: Any) { 4 view2 = UIView() 5 view2.frame = CGRect(x: 0, y: 0, width: 100, height: 100) 6 self.view.addSubview(view2) 7 }

上記コードのself.view.addSubview(view2)のself.view.~を変更していきました。
1.ViewController().view.addSubview(view2)
→ アプリは問題なく起動するが、viewが追加され無い。

2.self.addSubview(view2)
→ ViewControllerではなく、View1に追加されてしまう。

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

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

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

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

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

hoshi-takanori

2020/02/21 23:55

別ファイルというのが別画面のことなら、そもそもその別画面はまだ存在しない可能性があります。画面とは別にデータを持っておいて、各画面で必要なデータにアクセスして表示する、という設計を行う必要があると思います。また、View と ViewController を区別して、ViewController はいつでも好きに作れるものではないということも理解する必要があります。
mimizuku123

2020/02/25 09:36

ご回答ありがとうございます! 理解がおくれ返信が遅くなってしまい申し訳ありません。 >>画面とは別にデータを持っておいて、各画面で必要なデータにアクセスして表示する というお話から、別の方法で対処いたしました。 理解していない根本の部分を指摘していただきありがとうございます!
guest

回答2

0

自己解決というよりは、ご回答くださったお二人の言葉をヒントに考え直したといった内容ですが、
質問欄で訊こうとしていた方法とは少し違うような気がするので、こちらで失礼します。

viewとViewControllerの違いを意識すること、
新たにインスタンスが作成されてしまっていることから、

直接View2をaddSubView()するのではなく、
viewcontroller.swift内に
@objc func addViewButton(_ sender:UIButton)でview2を表示するfuncを記述し、
view1.swift内の
Buttonと上記func紐付けすることで対応しました。

初心者の理解がしにくい質問文にご丁寧なご回答いただきました。
本当にありがとうございました。

view1.swiftの

投稿2020/02/25 09:45

mimizuku123

総合スコア12

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

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

0

ベストアンサー

ViewController().view.addSubview(view2)だと新たにインスタンス作っちゃってます。

サンプルはView1のインスタンス時に貼り付け先のViewControllerのインスタンスを格納してます。
本来はちゃんと設計したほうがよいです。。

// view1.swift var vc:ViewController? @IBAction func AddButtonTap(_ sender: Any) { view2 = UIView() view2.frame = CGRect(x: 0, y: 0, width: 100, height: 100) //self.view.addSubview(view2) vc?.view.addSubview(view2) } // ViewController.swit let v1 = View1() v1.vc? = self

投稿2020/02/22 04:59

fromageblanc

総合スコア2724

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

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

mimizuku123

2020/02/25 09:38

ご回答ありがとうございます! 実際、新たにインスタンスを作っているという事を理解していませんでした! 別の方法で対応こそ致しましたが、 他の対処方法を考える大きなヒントとなりました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問