2017-07-12 72 views
0

我需要創建一個包含垂直堆棧視圖的視圖,該視圖包含一個Label,一個TableView,另一個Label和一個Button(按降序排列)。我一直在努力配置TableView,因爲我無法讓它填充單元格(目前在超級視圖中顯示爲空格)。現在,我有一個主視圖ViewController - 'YourOrderViewController' - 和TableView的TableViewController - 'OrderItemsTableViewController'。它看起來像這樣:如何填充UIViewController子視圖的UITableView?

主要看

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的來源,但是這也沒有效果。任何幫助表示讚賞。

+0

對不起,我不能看到你的OrderItemsTableViewController.view添加到你的視圖層次結構 –

回答

0

普通&簡單你就這樣做了。

例如:的OrderItemsTableViewController

orderListTable.delegate = orderTableController 
orderListTable.dataSource = orderTableController 

orderTableController實例是一個controller型,代替它應一個NSObject型類的一個符合的tableView委託&數據源。

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,只需使用一個自定義單元格現在,直到你得到它工作

+0

謝謝!我實際上能夠讓ViewController本身成爲委託和數據源,但是這爲我解決了這個問題。 –