2012-01-19 32 views
0

私はiOS開発が初めてで、UIViewからUIViewにアクセスできるかどうかは疑問でした。UIView内のUIViewにアクセスする方法

私の現在の設定はUIViewのメインUIViewControllerです。その中でUIView私はデバッグ情報を表示するために使用する小さいUIViewを持っています。私がしたいのは、ロジックエラーをデバッグしようとしているときに、バックグラウンドカラーを変更する必要があるときにそれを表示/非表示にできるように、何とかそのビューにアクセスできるようにすることです。

私はself.viewを使用してアクセスしようとしましたが、それは私に親ビューを与えます。さまざまなサイトやチュートリアルで、サブビューに追加してそこから作業する必要があることがわかりましたが、そうするとビューは0x0に設定されます。私はIBOutletを使用する必要があることも知っていましたが、IBではどこか参照する必要がありますが、IBのどこにでもコントローラのヘッダーファイルで定義したオブジェクトが表示されないので、 。

アドバイスをいただければ幸いです。

答えて

4

あなたはIBを通して、あなたの第二のUIViewにアクセスする場合:

  • @property (nonatomic, retain) IBOutlet UIView *myViewであなたのViewControllerでアウトレットを作成してくださいそれはあなたのルートビュー
  • にInterface Builderで追加のmake(もちろん、それを合成)
  • Interface BuilderでFile's Ownerの新しく作成したコンセントにビューを接続します。
  • Voila!今のために働く必要があります - ちょうどdocumentation for UIViewを見てみましょう
+0

+1素敵な簡潔な答え – Sam

+0

完璧!どうもありがとうございます。私はFile's Ownerを使ってそのことができるのか分からなかった。 – Seb

1

これを行う最も簡単な方法は、ViewControllerの.hファイルにIBOutletを設定し、その埋め込みビュー(またはサブビュー)をそのIBOutletに接続することです。

次に、いつでもhiddenプロパティをオン/オフに設定できます。

Xcode 4でユーザーインターフェイスを設計する方法については、this Apple documentationを参照してください。「ソースコードで直接接続する」セクションに特に注意してください。

+0

+1説明しようとしているにもかかわらず、ドキュメントはあなたが指摘したように見て学習するのに最適な場所だと思う。おそらくビデオも役立つかもしれません。 – Sam

+0

ビデオが役立つ一方で。オフィスで見るのは少し難しいです。 – Seb

0

(すべての正しい、それが非nilの値を持つことになります場合)self.myViewであなたのビューにアクセスします。ビューの内容にアクセスするためのメソッドがいくつかあることがわかります。たとえば、すべてのビューのサブビューの配列を提供するsubviewsプロパティがあります。 -viewWithTag:メソッドもあり、指定されたタグを持つサブビューへのポインタを返します。

ビュー階層が.xibファイルまたはストーリーボードに作成されている場合、階層のさまざまなメンバーにアクセスする一般的な方法は、次のとおりです。あなたのコントローラーにアウトレット(IBOutletとタグ付けされたプロパティー)を作成し、それらのアウトレットを.xib内の適切なビューに接続します。その後、.xibがロードされると、コンセントに正しいビューポインタが設定されます。

0

あなたは、コード内のサブビューを作成している場合は、子UIViewframe(原点&サイズ)を設定し、[self.view addSubview:myChildView]を行うことになるでしょう。後でそれを隠すために、このビューを追跡するためにプロパティまたはivarを使用することができます。

xibファイルを使用していてxibの中に子ビューを定義している場合、ほとんどの場合、要素を参照するIBOutletを定義する必要があります。お勧めしますあなたの実装内部

@property (nonatomic, retain) IBOutlet UIView * myChildView; 

:ような何か

@implementation MyCoolViewController 

@synthesize myChildView = _myChildView; 

-(void) dealloc 
{ 
    // make sure to release reference so the property gets cleaned up 
    [_myChildView release], _myChildView = nil; 
    [super dealloc]; 
} 

-(void)someFunc 
{ 
    self.myChildView.hidden = YES; // or NO 
} 

にInterface Builderの内部で、あなたのXIBでいくつかのビューにそのコンセントを割り当てる必要があります。通常、「所有者」を選択してこれを行い、接続インスペクタでプロパティ名をクリックし、割り当てたいUIViewにドラッグします。

1

与えられた答えはここに別のアプローチがあり、優れている:

UIView * viewToGet = [theMainView viewWithTag:1] 

あなたはIBにタグを割り当てることができます。ビューにタグ(int型、例えば「1」)と、このような後からのアクセスを与えます同様にコード内に存在します。

関連する問題