42

私はこれがWWDCビデオで使用されているのを見ましたが、ごく短時間でした。彼らは実際のxibファイルを作成する方法については説明しませんでした。

MyCustomCellというUITableViewCellサブクラスがあります。これには、UILabels、UIImageViewsなどのいくつかのプロパティがあります...すべてIBOutletsとして設定されています。

さて、私のxibファイルで...

ファイルの所有者として何を設定しますか?MyCustomCellクラスはどこで参照しますか?これはファイルの所有者ですか?

ファイルの所有者を設定したら、それをxibのルートビューにリンクするにはどうすればよいですか?

いくつかの設定を試しましたが、使用するとエラーが発生し続けます。

ああ、私がそれを登録するために使用しているコードは...

self.cellNib = [UINib nibWithNibName:@"MyCustomCell" bundle:nil];
[self.tableView registerNib:self.cellNib forCellReuseIdentifier:@"CustomCell"];

ありがとう

4

3 に答える 3

48

通常、その場合、ファイルの所有者について気にする必要はありません。これはtableView、提供された/関連付けられたセルを。UINibとともにインスタンス化する場合に発生するためreuseIdentifierです。ペン先のすべてのトップレベルオブジェクトをロードし、クラスの最初のトップレベルオブジェクトのみを使用します(または、クラスUITableViewCellに関係なく、最初のトップレベルオブジェクトのみを使用しますか?しかし、一般的にはUITableViewCell、とにかくあなたのXIB— 「プロキシ」だけであるFile's Ownerとを数えずに)。First Responder

実際、はtableViewセルをデキューしようとし、再利用可能なセルが見つからない場合は、指定したセルを使用して新しいセルを作成しUINibます。これにたものになります:

NSArray* topLevelObjects = [self.cellNib instantiateWithOwner:nil options:0];
cell = [topLevelObjects objectAtIndex:0];

(もちろん、これはアイデアを示すための簡略化されたバージョンです。実際にこれらの正確な行を呼び出すかどうかはわかりませんが、かなり近いはずです)

したがってFile's Ownerこの特定のケースでは使用されません。XIBファイルの唯一のトップレベルオブジェクトとして、既存のanfの隣に単純なカスタムを配置UITableViewCellするだけで済みます(これも「プロキシ」/「外部オブジェクト」のみです)。参照」であり、インスタンス化されず、)によって返されるトップレベルオブジェクトの一部にはなりません。File's OwnerFirst ResponderinstantiateWithOwner:options:


それでも機能しない場合:

  • IBでのセルを正しく入力し( IBreuseIdentifierUITableViewCellでセルを選択したら、右側の[オブジェクトインスペクター]ペインで)、コードで使用しているものとまったく同じ値をreuseIdentifierIBで使用していることを確認してください。
  • それでもうまくいかない場合は、詳細情報、特にエラー、ログメッセージ、または例外の種類をお知らせください。
于 2012-09-25T20:40:00.513 に答える
11

質問で与えられたコードは問題ないことがわかりましたが、ストーリーボードを使用している場合self.tableViewは、メソッドで参照することはできません。別の質問でそれについてinitいくつかの議論があります。

したがって、最初の行はinit:になります

self.cellNib = [UINib nibWithNibName:@ "MyCustomCell" bundle:nil];

ただし、この行は次のようになりviewDidLoadます。

[self.tableView registerNib:self.cellNib forCellReuseIdentifier:@ "CustomCell"];

それは私の不思議なエラーを修正します、例えば"*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle <Foo.app> (loaded)' with name 'Ogf-Sj-1ej-view-bBf-Ti-Dda''"

そして、はい、私はストーリーボードから物事をすくい取り、ビューコントローラー全体で再利用するためにそれらをxibsに配置するのと非常によく似た何かをしています!

于 2013-11-15T02:50:57.737 に答える
3

「AliSoftware」からの回答に加えて、ここで最も明白でないことに注意してください。UITableViewCellは UIViewでさえもルートビュー*上*である必要があります。デフォルトでは、新しいIBファイルを選択すると、UIViewが作成されます。したがって、UIViewを削除すると役立ちます。ありがとう。

PS:私はその答えにコメントしたかったのですが、奇妙な理由でコメントできず、答えることしかできません。特定の評価が必要だと思います。

于 2014-03-17T05:43:56.413 に答える