2009-03-20 12 views
0

バックグラウンドイメージ、ボタン、および前面に移動する必要があるフルスクリーン(影)をカバーする別のイメージを含むビューがnibファイルにあります。 ビューでは、子ビューを作成していて、それらを作成して[self addView]を使用して追加した後、シャドウイメージの前面に移動する必要があります。インターフェイスビルダに追加されたUIViewのサブビューにプログラム的にアクセスする

私は現在そのビューを見つけるためにタグ属性を使用していますが、Interface Builderで何らかの名前で追加したサブビューを特定することによって、おそらくもっと良い方法があると思います。

サブビューをその親と接続するためにIBOutletを追加しようとしましたが、機能しませんでした。サブビューが既に何らかの方法で親に接続されているため意味がありません。

ヒント?

答えて

2

IBOutletsウェイはうまくいくはずであり、おそらくこれを実行する最善の方法です。 .hファイルで宣言した後、Interface Builderで適切な接続を確立していることを確認してください。

+0

No luck。親ビューにIBOutletを追加してその子を接続しますが、アクセスしようとするとオブジェクトの代わりにnilが返されます。 同じ運がある変数とプロパティの両方を試しました。 – pgb

+0

あなたのIBOutletはどこに宣言されていますか?コントローラーのメタファーごとに1つのペンを使用している場合は、ファイルの所有者(コントローラー)にIBOutletを宣言し、ファイルの所有者に宣言されているアウトレットがIBのアイテムにリンクしていることを確認します。これが私のやり方です。 – hyuan

+0

UIViewサブクラスでアウトレットを宣言しています。コントローラーではなく、他のビューと接続しようとしました。 – pgb

0

どの時点でサブビューにアクセスしようとしていますか? ViewControllerのinit内で試してみると、IBOutletsはnilになります。最初に取得できるメソッドはおそらくviewDidLoadです。

このようにするのが理にかなっている理由は、IBOutletsが既に別のもののサブビューであっても、一部のコンポーネントへの直接のポインタにすぎないということです。ちょうど多くの狩猟を助ける。

+0

私はinitWithCoderから呼び出されたメソッドのビューにアクセスしようとしています。 – pgb

+0

代わりにviewDidLoadを使用してみてください。基本的には同じことをしていますが、ビューが読み込まれたときにのみ呼び出されます。 –

0

タグを使用すると、viewWithTag:メソッドを使用している限り、特定のビューを見つけるのに完全に有効な方法です。すでにタグを使用している場合は、viewWithTag:を呼びたくない場合を除き、IBOutletsに変更する必要はありません。

1

iPhoneは、ビューコントローラの遅延読み込みを行います。ペン先は、Kendallが指定したようにinitWithCoderやinitメソッドにロードされていない可能性があります。

viewDidLoadは、ビューが表示される前にそれらにアクセスしたい場合は、ペン先から何かにアクセスするための好ましい場所です。

希望に役立ちます。

関連する問題