我需要创建一个包含垂直堆栈 View 的 View ,其中包含一个标签、一个TableView、另一个标签和一个按钮(按降序排列)。我一直在努力尝试配置 TableView,因为我无法让它填充单元格(当前仅在 super View 中显示为空白)。现在,我有一个用于主视图的 ViewController - 'YourOrderViewController' - 和一个用于 TableView 的 TableViewController - 'OrderItemsTableViewController'。它看起来像这样:
主视图
class YourOrderViewController: UIViewController{
var cellTitle = String()
var cellSubtitle = String()
@IBOutlet weak var orderListTable: UITableView!
let orderTableController = OrderItemsTableViewController()
override func viewDidLoad() {
super.viewDidLoad()
orderListTable.delegate = orderTableController
orderListTable.dataSource = orderTableController
}
和TableView subview
class OrderItemsTableViewController: UITableViewController {
var drinkOrderList = [Drink]()
var foodOrderList = [Food]()
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if section == 0 {
return drinkOrderList.count + foodOrderList.count + 1
} else {
return 0
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "OrderItemCell", for: indexPath)
if indexPath.row < drinkOrderList.count {
cell.textLabel?.text = drinkOrderList[indexPath.row].drinkName
} else if indexPath.row - drinkOrderList.count < foodOrderList.count {
cell.textLabel?.text = foodOrderList[indexPath.row].foodName
} else {
print("Also here")
cell = tableView.dequeueReusableCell(withIdentifier: "AddToOrderCell", for: indexPath)
}
return cell
}
我最初尝试在一个 View Controller (一个 UIViewController,它是 UITableView 的委托(delegate)和数据源)中制作整个事情,但这也不起作用。如有任何帮助,我们将不胜感激。
最佳答案
简单明了,你已经结束了。
例如:
orderListTable.delegate = orderTableController
orderListTable.dataSource = orderTableController
orderTableController
OrderItemsTableViewController
的实例是一个 controller
类型,相反应该是一个符合 NSObject 类型的类 TableView 委托(delegate)和数据源。
class TableViewDataSource: NSObject, UITableViewDataSouce {
// no need of controller's life cycle
// just declare all & implement all protocol required
}
class TableViewDelegate: NSObject, UITableViewDelegate {
// have some property where you could set the data after you initialize this object
}
现在你可以这样做
let _delegate = TableViewDelegate()
let _dataSource = TableViewDataSource()
_dataSource.someDataProperty = data //<-- important
orderListTable.delegate = _delegate
orderListTable.dataSource = _dataSource
此外,在您的 Controller 中,您需要添加方法来重新加载此tableView
在您的 cellForRowAt
中,暂时只使用一个自定义单元格,直到它正常工作
关于ios - 如何填充作为 UIViewController subview 的 UITableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45068919/