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

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

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

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

Swift

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

Q&A

解決済

1回答

6293閲覧

共通パーツとして使いまわしているビュー内の処理を実装する方法について

Honma

総合スコア25

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/06/20 02:30

編集2017/06/20 06:03

スマートフォン向けアプリ開発を下記の環境で行っています。
Swift3.0.1
Xcode8.3.3

イメージ説明

上記参考画像のように、メインはストーリーボードを使いつつ、
複数の画面で共通パーツを使いまわしたいと考えています。
共通パーツを画面に表示するところまでは下記のPartsView.swiftで解決しているのですが、パーツ内の処理(例えば、PartsView.xibのラベル内容を変更するなど)を記述する場所がわかりませんでした。


追加説明(2017/06/20/14:55)
以下、PartsView.swiftのコードになります

import UIKit class PartsView: UIView { override init(frame: CGRect){ super.init(frame: frame) loadNib() } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! loadNib() } func loadNib(){ let view = Bundle.main.loadNibNamed("PartsView", owner: self, options: nil)?.first as! UIView view.frame = self.bounds self.addSubview(view) } }

お手数をおかけいたしますがご教示いただけますと幸いです。

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

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

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

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

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

fuzzball

2017/06/20 02:35

PartsViewの生成コードを書いて下さい。クラス名はPartsViewControllerではなくPartsViewではないのでしょうか?なぜViewControllerなのでしょうか?
Honma

2017/06/20 02:53

ありがとうございます。PartsViewの生成コードといいますと具体的に何を記載すればよろしかったでしょうか。クラス名については記載誤りでした、正しくはご指摘の通りとなります。ただし、パーツとなるViewのソース初期生成時に、PartsViewにUIViewメソッドしかなかったので、これをUIViewControllerに変えてしまっている状況です。
fuzzball

2017/06/20 03:56

全く状況が分かりません。PartsViewクラスは何を継承しているのでしょうか?
Honma

2017/06/20 05:53

分かりづらい記述で申し訳ありません。先ほどの返答はなかったことにしていただけると幸いです。現在PartsViewはUIVewを継承しています。説明文にPartsViewクラスのコードを記載しておきます。
fuzzball

2017/06/20 06:05

PartsViewは画面に表示されていますか?表示されているなら、あとはPartsViewクラスの中に処理を書けばいいと思うのですが、現状での質問は何でしょうか?
Honma

2017/06/20 06:13

PartsViewは画面に表示されています。書きたい処理というのが例えばxibのラベルへの代入となるのですが、今までUIViewで処理的なものを書いた経験がなく(UIViewControllerのviewDidLoad内などに書いていました)PartsViewクラスにどう書けばよいかわかりませんでした。
guest

回答1

0

ベストアンサー

今までUIViewで処理的なものを書いた経験がなく(UIViewControllerのviewDidLoad内などに書いていました)PartsViewクラスにどう書けばよいかわかりませんでした。

  1. xibからPartsViewにUILabelのアウトレットを繋ぐ。
  2. Storyboard上で、PartsViewからViewControllerにアウトレットを繋ぐ。
  3. ViewControllerからPartsViewのUILabelにアクセスする。

今までと違うのは1番だけで、後は今まで通りです。

投稿2017/06/20 06:48

fuzzball

総合スコア16731

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

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

Honma

2017/06/20 07:30

ご回答いただきありがとうございます。 無事処理の記述ができました。大変感謝しております。 ちなみに、現在の方法だと呼び出し元のViewController全てに対して2.~3.の手順が必要になるかと思いますが、これらについても共通化する方法をご存知ではなかったでしょうか? 追加の質問になってしまいすみませんがご教示いただけますと幸いです。
fuzzball

2017/06/20 07:41

処理(3番)に関しては継承を使えばいいと思いますが、アウトレットに関しては全てのViewControllerで繋ぐしかないと思います。 アウトレットを繋がず、UIViewのsubviewsプロパティやviewWithTag(_:)を使ってViewを取得するようにすれば出来なくはありません。
fromageblanc

2017/06/20 07:58 編集

AppDelegateあたりで、シングルトンでインスタンスしたのを各ViewControllerでaddSubviewというのもありかと思います。 // ex let sharedPartsView = UINib(nibName: "PartsView", bundle: nil).instantiate(withOwner: self, options: nil)[0] as! PartsView
fromageblanc

2017/06/20 08:22 編集

↓勘違いです。すいません。コメントアウト /* あと、PartsViewクラスにラベルをアウトレット接続する前提だと、 let view = Bundle.main.loadNibNamed("PartsView", owner: self, options: nil)?.first as! UIView を、 let view = Bundle.main.loadNibNamed("PartsView", owner: self, options: nil)?.first as! PartsView にすれば、loadNib内にラベルの処理が書けちゃいますね(各ViewControllerに依存しない処理であれば) */
fuzzball

2017/06/20 08:12

@fromageblancさん as! PartsViewは出来ないですよ。それはただのUIViewです。
fromageblanc

2017/06/20 08:21

あ、失礼しました。ラベルがクラス内のプロパティであればそもそも普通にアクセスできますねw
Honma

2017/06/20 08:50

@fuzzballさん 返答いただきありがとうございます。 >アウトレットを繋がず、UIViewのsubviewsプロパティやviewWithTag(_:)を使ってViewを取得するようにすれば出来なくはありません。 上記の方法でできるかどうか試してみたいと思います。 詰まった場合には別質問として投稿したいと思いますので、その際はもう一度お力添えいただけますと幸いです。
Honma

2017/06/20 08:51

@fromageblancさん アドバイスいただき、また例まで記載いただきありがとうございます。 アドバイスいただいた方法を試してみたいと思います。 詰まった場合には別質問として投稿したいと思いますので、その際はもう一度お力添えいただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問