2017-10-24 11 views
0

私は、次のエラーメッセージが出ます:2つの異なるビューコントローラに同じビューを追加することはできますか?

ビューしか 一度に最大1つのビューコントローラに関連付けることができます!

2つの異なるビューコントローラに同じビューを追加することはできますか?

Googleマップのインスタンスをタブビューコントローラに追加したいとします。

私はストーリーボードでswift4を使用しています。

+2

共通ビューのxibファイルを作成し、必要な数のコントローラに追加することができます。 – PGDev

+0

私はストーリーボードでswift4を使用しています。コントローラを追加するたびに、私はビューの新しいインスタンスも取得します。 –

+0

もちろん。ビューの新しいインスタンスは、コントローラに追加するたびに作成されます。あなたは何をしたいのですか?私は理解しません。あなたの要件を明確に述べてください。 – PGDev

答えて

1

をカスタムクラスの新しいインスタンスを追加することです。 Google Maps SDKのGMSMapViewを使用しているため、複数のタブにまたがって同じインスタンスを使用したい場合は、アプローチが異なります。

あなたがいずれかを実行できます。

  1. 新規インスタンス、同じパラメータを: 他のタブと同じになるように設定したパラメータと各タブで新しいインスタンスを作成します。
  2. : GMSMapViewのインスタンスを作成します。共有プロパティに格納します。それを移動するにはaddSubview()を使用してください。基本的に新しいタブでaddSubview()を使用して古いタブから削除し、新しいタブに追加します。
+0

ありがとうございました!あなたの2番目の提案はまさに私がやりたいことです。 'addSubview()'を実行すると 'GMSMapView'は前のタブから切り離されますか? –

+1

それはそれの美しさです、Cocoaは複数の場所で同じ 'UIView'を持つことをサポートしていないので、' addSubview() 'はそれを前の場所から自動的に削除し、新しい場所に追加します。 私はYouTube Video Viewに類似したものを使用しました。私のために働いた。 – NSAdi

0

UIViewは、1つの親ビューのみを持つことができ、superViewプロパティとして設定されているため、他の1つのビューと関連付けることができます。また、レイアウトのようなものはこのビューに設定され、それはスーパービューに関連しているので、複数のコントローラで同じビューを使用することは意味がありません。 最善の解決策は、UIViewをサブクラス化し、それを模したならば、あなたはXIBを作成し、各ビューに新しいインスタンスを追加する必要があり、すべてのViewControllerに

関連する問題