8

TableViewCellsのカスタマイズからカスタムサブクラスtableView:cellForRow:atIndexPath:の使用に移行しています。UITableViewCellこれが私がそれをした方法です:

まず、空のXIBを作成し、UITableViewCellそこにドラッグUILabelして上に配置します。クラス(のサブクラスUITableViewCell)を作成し、InterfaceBuilderのプロパティエディタでクラスをに設定しMyCellます。次に、TableViewControllerに次のように入力します。

- (void)viewDidLoad
{
 [super viewDidLoad];
 // load custom cell
 UINib *cellNIB = [UINib nibWithNibName:@"MyCell" bundle:nil];
 if (cellNIB)
 {
   [self.tableView registerNib:cellNIB forCellReuseIdentifier:@"MyCell"];
 } else NSLog(@"failed to load nib");
}

その後、すべてのカスタムコードを消去し、tableView:cellForRow:atIndexPath:デフォルトの行のみを残しました。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MyCell";
    MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    return cell;
}

これを実行すると、各セルに1つのラベル(XIBの作成中に真ん中にドロップしたラベル)が付いたセルの束が表示されると予想しました。しかし、代わりに、真っ白な空のセルが表示され、XIBレイアウトへのコンポーネントの追加/削除は役に立ちません。

カスタムセルXIBのInterfaceBuilderでreuseIdentifierを設定したり、ビューをロードしたりするなど、さまざまなオプションを1日かけて試しましたtableView:cellForRow:atIndexPath:が、何も役に立ちませんでした。

4

1 に答える 1

10

...しかし、私が見逃したのは、このTableViewControllerのストーリーボードのプロトタイプセルのreuseIdentifierをクリアすることだけでした。Storyboardは、後で呼び出されたビュー/コンポーネントを初期化するようviewDidLoadです。xCodeは、再利用するための実際のセルビューを、新しく作成されたTableViewControllersの標準である単なる白いセルに設定します。

繰り返しになりますが、TableViewプロパティに移動し、前に設定したreuseIdentifierを削除します;)

私はこれに多くの時間を費やしているので、ここでこの経験を共有すれば誰かに役立つかもしれないと思いました。

于 2012-11-15T16:37:20.750 に答える