UITableView显示每个单元格

时间:2017-08-14 23:54:09

标签: ios arrays swift uitableview struct

我正在使用相同结构的一组实例来填充一个tableview,我被每个单元格中显示的数组中的最后一项所困扰。

class RoutesViewController: UIViewController, UITableViewDataSource {

@IBOutlet weak var routesTableView: UITableView!


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

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let routeCell = routesTableView.dequeueReusableCell(withIdentifier: "routeCell") as! RouteTableViewCell



    for Flight in type1UnownedRoutesArray {
        routeCell.originLabel.text = "Origin:          \(Flight.origin)"
        routeCell.destinationLabel.text = "Destination: \(Flight.destination)"
        routeCell.priceLabel.text = "Price: $\(Flight.popularity)"
    }
  return routeCell
}

结构本身:

struct Flight {

var origin: String
var destination: String
var mileage: Int
var popularity: Int
var isOwned: Bool

}

如果我在[indexPath.row]之后添加for Flight in type1UnownedRoutesArray,我会Type Flight does not conform to protocol Sequence

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

问题的根源在于cellForRow方法中的这个问题,你在你阵列中的所有航班对象上骑行,当然最后一个值保留在你的单元格中,所以你需要替换

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let routeCell = routesTableView.dequeueReusableCell(withIdentifier: "routeCell") as! RouteTableViewCell

    for Flight in type1UnownedRoutesArray {
        routeCell.originLabel.text = "Origin:          \(Flight.origin)"
        routeCell.destinationLabel.text = "Destination: \(Flight.destination)"
        routeCell.priceLabel.text = "Price: $\(Flight.popularity)"
    }
  return routeCell
}

通过此

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let routeCell = routesTableView.dequeueReusableCell(withIdentifier: "routeCell") as! RouteTableViewCell

    let flight = type1UnownedRoutesArray[indexPath.row]
    routeCell.originLabel.text = "Origin:          \(flight.origin)"
    routeCell.destinationLabel.text = "Destination: \(flight.destination)"
    routeCell.priceLabel.text = "Price: $\(flight.popularity)"
 }

希望这有帮助

答案 1 :(得分:0)

问题是你不应该在cellforrow方法中迭代你的flight数组,因为它在你的数组中每个项目被调用一次。

试试这个

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let routeCell = routesTableView.dequeueReusableCell(withIdentifier: "routeCell") as! RouteTableViewCell

    let flight = type1UnownedRoutesArray[indexPath.row]
    routeCell.originLabel.text = "Origin:          \(flight.origin)"
    routeCell.destinationLabel.text = "Destination: \(flight.destination)"
    routeCell.priceLabel.text = "Price: $\(flight.popularity)"

  return routeCell
}