如何在swift

时间:2017-01-11 17:26:06

标签: ios swift uitableview swift3

我尝试将嵌入式表格视图集成到父UITableViewCell的{​​{1}}包含另一个自定义表视图的位置。我能够填充父表视图单元格的其他内容(例如标签和图像视图)。但是,儿童UITableView并未填充其内容并且仍为空白。 这是来自主UITableView的代码,即父母"父UIViewController

UITableView

这是我在父TableViewCell中的代码:

//table view delegate function
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "completedOrdersCell", for: indexPath) as! CompletedOrdersTableViewCell
        let currentOrder = completedOrders[indexPath.row]
        cell.orderDate.text = dateToString(date: currentOrder.date)
        cell.orderTime.text = dateToTimeToString(date: currentOrder.date)
        cell.totalAmountPaid.text = "R\(String(format: "%.2f", currentOrder.totalCost))"
        cell.driverProfile.image = currentOrder.driverProfile
        cell.driverName.text = currentOrder.driverName
        cell.restaurantLocation.text = currentOrder.restaurantLocation
        cell.dropOffAddress.text = currentOrder.dropOffAddress
        cell.mealsJSON = currentOrder.mealsJSON
        cell.deliveryFee.text = "R\(currentOrder.deliveryFee)"
        cell.tip.text = "R\(String(format: "%.2f", Double(currentOrder.driverTip)))"
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        completedOrderTableView.deselectRow(at: indexPath, animated: false)
    }

以下是孩子 @IBOutlet var mealsTableView: UITableView! var mealsJSON = "" struct Meal{ var quantity = Int() var name = "" var price = Double() } var meals = [Meal]() func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return meals.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "mealCell", for: indexPath) as! completedMealTableViewCell let currentMeal = meals[indexPath.row] cell.quantity.text = "\(currentMeal.quantity)" cell.name.text = currentMeal.name cell.amount.text = "R\(String(format: "%.2f", currentMeal.price))" return cell } override func awakeFromNib() { super.awakeFromNib() // Initialization code mealsTableView.delegate = self mealsTableView.dataSource = self print(mealsJSON) jsonToMeal() } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } func jsonToMeal(){ //set meals to data let mealJSONData = mealsJSON.data(using: String.Encoding.utf8) let readableJSON = JSON(data: mealJSONData!) //extract array from JSON for item in readableJSON["meals"].arrayValue{ var newMeal = Meal() newMeal.quantity = item["mealQuantity"].intValue print(newMeal.quantity) newMeal.name = item["mealName"].stringValue print(newMeal.name) newMeal.price = item["mealPrice"].doubleValue print(newMeal.price) meals.append(newMeal) } mealsTableView.reloadData() } 的代码:

UITableViewCell

1 个答案:

答案 0 :(得分:0)

首先,我相信如果你分开代码,一个文件为你的tableView,一个为你的tableViewCell,这是一个更好的主意。然后,在tableViewCell中实现UITableViewDelegateUITableViewDataSource。另外,为此tableView创建插座。

//
//  NewTableViewCell.swift
//  JustATest
//
//  Created by Alisson Enz Rossi on 1/11/17.
//  Copyright © 2017 com.Cotival.justATest. All rights reserved.
//

import UIKit

class NewTableViewCell: UITableViewCell {

    @IBOutlet var tableView: UITableView!

    override func awakeFromNib() {
        super.awakeFromNib()

        self.tableView.delegate = self
        self.tableView.dataSource = self
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
}
extension NewTableViewCell: UITableViewDelegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "id", for: indexPath)

        //...

        return cell
    }

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

}

此外,创建一个可以填充此tableView的数组,就像在父控制器中一样,并且不要忘记更改numberOfRowsInSection来计算数组中的项目数。它应该工作。