21

2つの異なるコントローラーに2つの異なるテーブルビューがあります。しかし、私がそれらに表示する必要があるセルは、同じように見えます。1つのtableViewにプロトタイプセルを作成し、UiTableViewCellをサブクラス化しました。さて、同じセルを別のコントローラーで使用したい場合、どうすれば使用できますか?

そのcustomCellファイルを新しいコントローラーにインポートし、ストーリーボードで指定されたものと同じ識別子を使用して両端キューに入れると、機能しません。それは言う

-[UITableView _configureCellForDisplay:forIndexPath:]でのアサーションの失敗

キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了しています、理由:' UITableView dataSourceはtableView:cellForRowAtIndexPathからセルを返す必要があります:'

つまり、明らかにそれは、セルがゼロであることを意味します。では、ストーリーボードから同じセルをインスタンス化するにはどうすればよいですか?新しいテーブル用に別のcustomCellを作成することは可能ですか、それとも作成する必要がありますか?

4

5 に答える 5

31

K..わかりました。初めに、

2つの異なるテーブルビューで1つのプロトタイプセルを使用することはできません。ただし、2つの異なるテーブルビューで同じtableViewCellサブクラスを使用できます。

これを実現するには、一方のコントローラーからプロトタイプセルをコピーして、もう一方のテーブルビューのプロトタイプセルとして貼り付けるだけです。貼り付けたテーブルビューのクラスは同じままです。restartIdentifierを変更するだけです。そしてそれを使用します。

編集:セルのUIがかなり複雑な場合は、セルのみに個別のxibを作成する方が理にかなっています。次に、プログラムでxibをテーブルビューに登録します。そうすれば、セルのコピーが1つだけになり、UIに変更があった場合にセルを維持するのにはるかに優れたものになります。

于 2012-10-22T10:17:58.200 に答える
2

異なるビューコントローラで同じプロトタイプセルを使用できます。設計したコントローラのテーブルビューからセルをデキューする必要があります。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let viewControllerInWhichCellWasDefined = tabBarController?.viewControllers?[0]   
  let cell = viewControllerInWhichCellWasDefined.tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath)
  return cell
}
于 2017-09-04T22:56:42.640 に答える
0

XIBでカスタムセルを作成すると、問題なく機能するはずです。しかし、セルidentifierが問題を引き起こしたのではないかと思います。各テーブルビューコントローラのセルの識別子を変更してみてください。

そうでない場合は、ソースコードを投稿することをお勧めします

于 2012-10-22T07:34:28.410 に答える
0

はい。ViewControllerBのテーブルビューには、ViewControllerAのテーブルビューのプロトタイプセルを使用できます。ViewControllerBに次のコードを実装する必要があります

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let vc_array = self.navigationController?.viewControllers 
    let view_controller = vc_array![vc_array!.count - 2] as! ViewControllerA
    let cell = view_controller.tableView.dequeueReusableCell(withIdentifier: "ViewControllerA_ID", for: indexPath) as! ViewControllerA
    
    return cell
}

ここで、ViewControllerAはプロトタイプセルを含むテーブルビューを含むViewControllerであり、ViewControllerBのテーブルビューで同じセルを使用しています。

于 2020-10-24T13:05:25.623 に答える
-3

異なるアプリで同じUITableViewCellを使用しました。1つのTableViewCellを他のアプリにコピーするだけです。つまり、両方のアプリのレイアウトは同じなどです。アプリは同じワークスペースに属していません。セットアップはうまく機能し、問題やエラーはありません。それが良い習慣かどうかはわかりません。

于 2017-02-24T22:16:21.003 に答える