【问题标题】:How do I fill a UITableView that is a subview of a UIViewController?如何填充作为 UIViewController 子视图的 UITableView?
【发布时间】:2017-12-17 13:04:55
【问题描述】:

我需要创建一个包含垂直堆栈视图的视图,该视图包含一个标签、一个 TableView、另一个标签和一个按钮(按降序排列)。我一直在努力尝试配置 TableView,因为我无法让它填充单元格(当前仅在超级视图中显示为空白区域)。现在,我有一个用于主视图的 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 子视图

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

}

我最初尝试在一个视图控制器中制作整个东西,一个 UIViewController,它是 UITableView 的委托和数据源,但这也不起作用。任何帮助表示赞赏。

【问题讨论】:

  • 抱歉,我看不到您将 OrderItemsTableViewController.view 添加到视图层次结构的位置

标签: ios swift uitableview uiviewcontroller


【解决方案1】:

简单明了,你已经完成了。

例如:

orderListTable.delegate = orderTableController 
orderListTable.dataSource = orderTableController

orderTableController OrderItemsTableViewController 的实例是 controller 类型,相反应该是符合 tableView 委托和数据源的 NSObject 类型的类。

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 

另外,在你的控制器中,你需要将方法添加到reload this tableView

在你的cellForRowAt 中,现在只需使用一个自定义单元格,直到你让它工作

【讨论】:

  • 谢谢!我实际上能够让 ViewController 本身成为委托和数据源,但这让我可以到达那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
相关资源
最近更新 更多