1

I currently have two UITableViewControllers, one with the prototype of the custom cell, and the other one not. Since both of them are connected through a push segue from the first to the second. I pass the selected custom cell to the second tableView.

Everything works fine, except that when I come back to the first view, the selected (and passed) cell is hidden, but when I scroll it enough to hide the blank space and scrolling back it shows.

How can I fix this?

4

2 に答える 2

1

私があなたがしていることを正しく理解している場合、あなたはタップされたセルの参照を2番目のビューコントローラーに渡し、次にそれを2番目のコントローラーのテーブルビュー内に表示して、cellForRowAtIndexPathメソッドで同じ参照を渡します。それは良い選択ではないようです:-)最初:そのセルは最初のViewControllerで使用するために割り当てられてキューに入れられたからです。セルはいつでも、最初のViewControllerによってprepareForReuseメッセージを受信できます。2番目:2番目のテーブルビューにセルを表示すると、セルは最初のテーブルビューから削除されます。

2番目のViewControllerで別のプロトタイプセルを作成したくない場合は、たとえば、最初のセルに新しいセルを割り当て、タップしたセルから新しいセルにすべてのプロパティをコピーしてから、新しいセルをに渡すことができます。 2番目のビューコントローラ。これは私が考えた最初の解決策ですが、他にももっと良い解決策があることを確認してください:-)

于 2012-11-04T19:59:25.253 に答える
1

Big Nerd Ranch Guideは、基本的にこの種の理由でストーリーボードに近づかないように言っています. ストーリーボードについては、とりわけ次のように述べています。

「全体的なストーリーボードは、簡単なコードをより簡単にし、難しいコードをより難しくします」.

プッシュセグエを介してセルを渡す必要があるかどうかはわかりません。ストーリーボードを使用しない場合は、通常、MyCustomerTableviewCell などと呼ばれる UITableViewCell タイプの新しいファイルを作成します。次に、UITableView の viewDidLoad メソッドで新しい Nib を作成し、それを tableView に追加します。

UINib *nib = [UINib nibWithNibName:@"MyCustomTableViewCell" bundle:nil];
// register this nib that contains the cell
[[self tableView] registerNib:nib forCellReuseIdentifier:@"MyCustomTableViewTableViewCell"];

次に、新しい空の XIB ファイルを作成し (file->new->User Interface->empty)、MyCustomTableViewCell.xib という名前を付けます。UITableViewCell をインターフェイス ビルダー スペースにドロップし、UITableViewCell タイプから MyCustomTableViewCell に変更し、ファイルの所有者が MyCustomTableViewCell であることを確認します。

次に、UITableViewファイルでこれを行います...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCustomTableViewTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomTableViewCell"];
...
return cell;
}

いずれにせよ、おそらくストーリーボード プロジェクトの一部としてこれを行うことができます (ただし、1 つのプロジェクトで XIB とストーリーボードを欠落させようとしたことはありません)。

于 2012-11-04T19:48:12.013 に答える