web-dev-qa-db-ja.com

cellForRowAtIndexPath外のセルを参照する方法

外のセルのラベルを更新しようとしています

_override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
_

を使用して

_let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! Cell
_

別の関数で。しかし、エラーが発生し続けます。そのため、let cell = Cell()を使用してセルを参照しようとしましたが、エラー_unexpectedly found nil_が発生しました。最後に、試しました

_let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! Cell
_

エラーは返されませんが、ラベル_cell.time.text_は更新されません。

7
Dups

Swift 3.Swift 4

let indexPath = IndexPath(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPath)

Swift 2.

let indexPath = NSIndexPath(forRow: 0, inSection: 0)
let cell = tableView.cellForRowAtIndexPath(indexPath)

NOTE:-上記の方法の助けを借りて、セルがnilである場合を除き、tableViewの可視セルのみを取得できます

22
Harshal Valanda

UITableViewオーバーライドメソッドcellForRowAt indexPathの外でセルを使用する場合は、最初に、行のindexPathをフェッチしてから、indexPathを使用する必要があります。その行のUITableViewのセルを取得できます。

セルを取得したら、UITableViewの外でそれらのプロパティとメソッドにアクセスできます。

これを試して:

このコードでは、カスタムセルを使用しています。

let indexPath = IndexPath.init(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPath) as! MembersCell
6
Inder Jagdeo

ステップ1:

モデルのデータを更新する

ステップ2:

indexPathを再読み込み

 let indexPathToRefresh = IndexPath(row: 0, section: 0)
 tableView.reloadRows(at: [indexPathToRefresh], with: .none)

これを使って:

tableView.cellForRow(at: IndexPath(row: row, section: section)) as! CustomCell

セルに次のようなプロパティがある場合

@IBOutlet label: UILabel!

あなたはこれを使うことができます:

tableView.cellForRow(at: IndexPath(row: row, section: section)) as! CustomCell).label.text = "Test123" // smth like this

それが役に立てば幸い

0
Vlad Pulichev

dequeueReusableCellWithIdentifierメソッドの外でcellForRowAtIndexPathを使用しないでください。

cellForRow(at:)を使用する必要があります https://developer.Apple.com/reference/uikit/uitableview/1614983-cellforrow

0