在函数中访问数组的 indexPath Swift
Access to array's indexPath in a function Swift
我正在尝试在函数内访问一个数组的indexPath
以更新这个数组的数据,但我没有知道如何将 indexPath
作为参数(特别是调用时传递的内容)传递给函数,或者这是否是解决方案。
我加入了 cellForRowAt
以 说明 这个函数如何访问 indexPath
。
var cryptosArray: [Cryptos] = []
extension WalletTableViewController: UITableViewDelegate, UITableViewDataSource, CryptoCellDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let crypto = cryptosArray[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! WalletTableViewCell
cell.setCrypto(crypto: crypto)
cell.delegate = self
cell.amountTextField.delegate = self
return cell
}
func cellAmountEntered(_ walletTableViewCell: WalletTableViewCell) {
if walletTableViewCell.amountTextField.text == "" {
return
}
let str = walletTableViewCell.amountTextField.text
let crypto = cryptosArray[indexPath.row] //<---- How to do that?
crypto.amount = walletTableViewCell.amountTextField.text
//Then update array's amount value at correct index
walletTableViewCell.amountTextField.text = ""
}
}
无需破解某些东西,只需让 tableView
告诉您给定单元格的 indexPath
:
// use indexPath(for:) on tableView
let indexPath = tableView.indexPath(for: walletTableViewCell)
// then you can simply use it
let crypto = cryptosArray[indexPath.row]
UITableView.indexPath(for:)
documentation 说:
Returns an index path representing the row and section of a given table-view cell.
这正是您想要的,您不想将 indexPath
破解到单元格。 indexPath
应该由 tableView
处理,而不是单元格。理想情况下,cell 应该完全忘记它的 indexPath
。
始终尝试使用标准方法来解决您的问题。一般来说,当你试图解决问题时,我建议你先看看UITableView的文档,那里有很多有用的方法。
如果你想在用户点击单元格时获得索引 path.row ,你应该在用户点击时获得索引 path.row 然后将它用于你的 func
例如:
var indexrow : int = 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// table cell clicked
indexrow = indexPath.row
}
func cellAmountEntered(_ walletTableViewCell: WalletTableViewCell) {
if walletTableViewCell.amountTextField.text == "" {
return
}
let str = walletTableViewCell.amountTextField.text
let crypto = cryptosArray[indexrow]
crypto.amount = walletTableViewCell.amountTextField.text
//Then update array's amount value at correct index
walletTableViewCell.amountTextField.text = ""
}
我正在尝试在函数内访问一个数组的indexPath
以更新这个数组的数据,但我没有知道如何将 indexPath
作为参数(特别是调用时传递的内容)传递给函数,或者这是否是解决方案。
我加入了 cellForRowAt
以 说明 这个函数如何访问 indexPath
。
var cryptosArray: [Cryptos] = []
extension WalletTableViewController: UITableViewDelegate, UITableViewDataSource, CryptoCellDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let crypto = cryptosArray[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! WalletTableViewCell
cell.setCrypto(crypto: crypto)
cell.delegate = self
cell.amountTextField.delegate = self
return cell
}
func cellAmountEntered(_ walletTableViewCell: WalletTableViewCell) {
if walletTableViewCell.amountTextField.text == "" {
return
}
let str = walletTableViewCell.amountTextField.text
let crypto = cryptosArray[indexPath.row] //<---- How to do that?
crypto.amount = walletTableViewCell.amountTextField.text
//Then update array's amount value at correct index
walletTableViewCell.amountTextField.text = ""
}
}
无需破解某些东西,只需让 tableView
告诉您给定单元格的 indexPath
:
// use indexPath(for:) on tableView
let indexPath = tableView.indexPath(for: walletTableViewCell)
// then you can simply use it
let crypto = cryptosArray[indexPath.row]
UITableView.indexPath(for:)
documentation 说:
Returns an index path representing the row and section of a given table-view cell.
这正是您想要的,您不想将 indexPath
破解到单元格。 indexPath
应该由 tableView
处理,而不是单元格。理想情况下,cell 应该完全忘记它的 indexPath
。
始终尝试使用标准方法来解决您的问题。一般来说,当你试图解决问题时,我建议你先看看UITableView的文档,那里有很多有用的方法。
如果你想在用户点击单元格时获得索引 path.row ,你应该在用户点击时获得索引 path.row 然后将它用于你的 func
例如:
var indexrow : int = 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// table cell clicked
indexrow = indexPath.row
}
func cellAmountEntered(_ walletTableViewCell: WalletTableViewCell) {
if walletTableViewCell.amountTextField.text == "" {
return
}
let str = walletTableViewCell.amountTextField.text
let crypto = cryptosArray[indexrow]
crypto.amount = walletTableViewCell.amountTextField.text
//Then update array's amount value at correct index
walletTableViewCell.amountTextField.text = ""
}