Как использовать несколько меток в UITableView? - PullRequest
0 голосов
/ 01 апреля 2019

Я получаю данные из JSON (имя, фамилия и адрес электронной почты), но я могу отображать только имя в UITableView.Я старался изо всех сил, но я не мог заставить это работать.Ниже мой код.

import UIKit

struct User: Codable {
    let firstName: String
    let lastName: String
    let email: String

    enum CodingKeys: String, CodingKey {
        case firstName = "first_name"
        case lastName = "last_name"
        case email = "email"
    }
}

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableview: UITableView!

    private var dataSource = [User]() {
        didSet {
            self.tableview.reloadData()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableview.register(UITableViewCell.self, forCellReuseIdentifier: "groupCell")
        self.tableview.dataSource = self
        self.tableview.delegate = self

        let url = URL(string: "https://x.com/x.php")

        URLSession.shared.dataTask(with: url!, completionHandler: { [weak self] (data, response, error) in
            guard let data = data, error == nil else {
                print(error?.localizedDescription ?? "An error occurred")
                return
            }

            DispatchQueue.main.async {
                self?.dataSource = try! JSONDecoder().decode([User].self, from: data)
            }
        }).resume()
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        tableview.reloadData()
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataSource.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "groupCell", for: indexPath)
        let user = self.dataSource[indexPath.row]
        cell.textLabel?.text = user.firstName
        // cell.textLabel?.text = user.lastName  If I write this line then it only shows last name
        return cell
    }

}

1 Ответ

1 голос
/ 02 апреля 2019

Вы можете использовать UITableViewCell.CellStyle.subtitle, например:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell: UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "groupCell")
    if cell == nil {
        cell = UITableViewCell(style: .subtitle, reuseIdentifier: "groupCell")
    }

    let user = self.dataSource[indexPath.row]
    cell.textLabel?.text = user.firstName + " " + user.lastName
    cell.detailTextLabel?.text = user.email
    return cell
}

Вам не нужно регистрировать ячейку, поэтому УДАЛИТЕ следующую строку:

tableview.register(UITableViewCell.self, forCellReuseIdentifier: "groupCell")
...