0

単一のビュー テンプレートを使用して Xcode プログラムを開始すると、デフォルトで VC になり、View はその VC で IBOutlet として既に設定されているためself.view、View Controller を使用してアクセスできます。

ここで、カスタム UIView (NewView と呼ばれる) が必要な場合は、プロジェクトに UIView クラス ファイル ( .h/ .m) を追加できます。今、私の最初の考えは、ストーリーボードのルート「UIview」に移動し、そのクラスを「NewView」に変更することでした。

NewView に "myProperty" というパブリック プロパティがあると仮定すると、VC から を使用してアクセスできるはずself.view.myPropertyです。そうではありません!

UIView をサブクラス化する唯一の方法は、ルート UIView の下にある SB に UIView オブジェクトを追加し、VC からその UIView への IBOutlet を作成することだと言っているのでしょうか? それで、私がそれを使用できない場合、そのルートUIViewの使用は何ですか。

4

1 に答える 1

3

サブクラス化できないという問題ではなくUIView(既に見たように)、サブクラスを認識するコンパイラの問題です。 self.viewサブクラスではなく、オブジェクトへのポインターとして宣言されているUIViewため、そのプロパティにアクセスするには、少し余分な作業を行う必要があります。つまり、キャスト。「myProperty」にアクセスするには、 を使用します[(NewView*)self.view myProperty];。そのような単純な。

self.view文字通り「 has the classNewViewであり、あなたが考えているものではないので、そのように認識してください」というコンパイラへの一種の約束としてキャストする必要があります。

補足として、XIB のルート ビューのクラスが適切に設定されていることも確認します (つまり、 class である必要がありますNewView。そうしないと、メッセージを送信しようとすると、キャストが失敗し、UIViewオブジェクトが返されます。に応答しないため-myProperty、一般的な例外がスローされます)。

于 2012-10-19T02:35:16.180 に答える