Описание ячейки табличного представления - PullRequest
1 голос
/ 23 марта 2019

Я следую онлайн-курсу, чтобы изучить 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.
    }


}

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

В дополнение к ответу Тома Пирсона по 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
}
0 голосов
/ 23 марта 2019

Документация Apple в IndexPath гласит: Каждый индекс в пути индекса представляет индекс в массив дочерних элементов от одного узла в дереве к другому, более глубокому, узлу.

В простом видеПо-английски это означает, что IndexPath s - это способ доступа к двумерному массиву, которым является dataSource tableView.TableView должен знать, сколько разделов у него есть, и сколько строк в каждом разделе.

В вашем случае есть только один раздел, поэтому вам не нужно беспокоиться о indexPath.section, потому что раздел всегда равен 0. В tableView есть только один массив (ваш cellContent массив).многомерный источник данных, так что вы можете получить доступ к элементам, используя indexPath.row.Если у вас было более одного массива cellContent Array, вам пришлось бы использовать indexPath.section для доступа к правильному, прежде чем вы могли бы использовать indexPath.row

Вы пропустили numberOfSections метод UITableViewDatasource, который возвращает 1 по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...