我尝试将嵌入式表格视图集成到父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
答案 0 :(得分:0)
首先,我相信如果你分开代码,一个文件为你的tableView,一个为你的tableViewCell,这是一个更好的主意。然后,在tableViewCell中实现UITableViewDelegate
和UITableViewDataSource
。另外,为此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
来计算数组中的项目数。它应该工作。