我正在学习在线课程以学习iOS。我正在使用Swift 4.2。
我的问题是关于这种方法的:
// This function is defining each cell and adding contenet to it.
internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
cell.textLabel?.text = cellContent[indexPath.row]
return cell
}
以上方法在下面的代码中究竟是如何工作的?我知道上面的方法描述了表格视图的每个单元格,但是表格视图是否为每一行调用了它?
indexpath.row到底是什么意思?我对此感到困惑。
请帮助我。谢谢。
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var cellContent:Array<String> = ["Amir", "Akbar", "Anthony"]
// This function is setting the total number of cells in the table view
internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cellContent.count
}
// This function is defining each cell and adding contenet to it.
internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
cell.textLabel?.text = cellContent[indexPath.row]
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
}
答案 0 :(得分:0)
Apple's documentation在IndexPath上说:索引路径中的每个索引代表从树中一个节点到另一个更深节点的子级数组的索引。
简单地说,它基本上意味着IndexPath
是访问二维数组的一种方式,而tableView的dataSource
就是这种方式。 tableView需要知道它有多少节,以及每个节中有多少行。
在您的情况下,只有一个节,因此您不必担心indexPath.section
,因为该节始终为0。{{中只有一个数组(您的cellContent
数组) 1}}的多维数据源,因此您可以使用tableView
访问元素。如果您有不止一个cellsContent Array,则必须先使用indexPath.row
来访问正确的一个,然后才能使用indexPath.section
您已经省略了indexPath.row
的{{1}}方法,该方法默认情况下返回numberOfSections
。
答案 1 :(得分:0)
除了汤姆·皮尔森(Tom Pearson)在IndexPath上的答案外,
internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
是的,tableView中的每个可见单元格都会调用此方法。
如果在cellForRowAt方法中使用以下方法,则单元将被重用而无需实例化更多的单元对象。
let cell = tableView.dequeueReusableCell(withIdentifier: action,
for: indexPath as IndexPath)
一旦该单元格不可见(可以滚动),该单元格对象将重新用于新的可见行,并且不会为每个单元格新创建该对象。这种方法的强大之处在于。
通常的代码将是这样。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "someIdentifier",
for: indexPath as IndexPath) as? SomeCell else {
fatalError("Cell is not of type SomeCell")
}
cell.title.font = somefont
cell.title?.textColor = somecolor
cell.backgroundColor = UIColor.clear
return cell
}