私は自分のUIViewサブクラスのXIBを作成するプロセスのほとんどに精通していますが、すべてが適切に機能しているわけではありません。ほとんどの場合、IBOutletsのリンクに関係しています。回り道のように見えるようにそれらを動作させることができます。
私のセットアップはこれです:
- MyClass.hとMyClass.mがあります。UIView(ビューと呼ばれる)とUILabel(myLabelと呼ばれる)のIBOutletsがあります。オンラインのいくつかの例がこれが必要であることを示唆しているように見えたので、「view」プロパティを追加しました。実際には、ビュープロパティが見つからなかったためにクラッシュする問題が解決されました。これは、UIView親クラスでもないと思います。 。
- MyClass.xibというXIBファイルがあり、そのファイルの所有者カスタムクラスはMyClassであり、そのクラスの.hと.mが存在した後に正しく事前入力されています。
私のinitメソッドは、問題が発生している場所です。
NSBundle mainBundleの「loadNibNamed」メソッドを使用して、所有者を「self」に設定しようとしました。これは、ビューのインスタンスを作成し、そのアウトレットがクラス内のアウトレットと自動的に一致することを期待しています(私は知っています)これを行う方法と私はそれに注意しています)。次に、「self」を、そのペン先のインデックス0のサブビューと等しくするのではなく、等しくしたいと思いました。
self = [super init];
またはそのようなもの。
私はここで間違ったことをしているように感じますが、オンラインの例ではinitメソッドでも同様のことが起こっていますが、それらはそのサブビュー0をviewプロパティに割り当て、子として追加します-しかし、それは合計ではありません2つのMyClassインスタンス?loadNibNamedを介してインスタンス化された子MyClassを含む、IBOutletsに本質的にリンクされていないもの?または、せいぜい、MyClassの直接の子として最初に必要だったすべてのIBOutletsを含む追加の中間UIViewを備えたMyClassインスタンスではありませんか?これは、instanceOfMyClass.frame.size.widthのようなことを行う場合、0を返すので、導入された子UIViewが探していた実際のフレームサイズを返すので、少し厄介です。
私が間違っているのは、initメソッド内でloadNibNamedをいじっているということですか?私はもっとこのようなことをすべきですか?
MyClass *instance = [[MyClass alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil];
またはこのように?
MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0];
よろしくお願いします。