2017-01-23 136 views
0

我有一個使用xib文件構建的自定義視圖。在這個自定義視圖中,有一個UIView,我想在其中添加一個靜態的UITableView作爲子視圖。此處顯示的UITableView出現在storyboard中,並與UITableViewController相關聯。我做了以下內容:如何將UITableView作爲子視圖添加到xib中的UIView?

let vc = (UIStoryboard(name: "Main", bundle: nil)) 
    .instantiateViewControllerWithIdentifier("tableController") as! TableController 
vc.loadViewIfNeeded() 
table = vc.table // this is an outlet, I'm sure it is not nil 
table.delegate = vc 
table.dataSource = vc 
table.backgroundColor = UIColor.greenColor() 
containerView.addSubview(table) 

我可以看到我的自定義視圖中的綠色背景,但不被顯示

no table cells! 表格單元格我知道插座表不爲零,因爲如果在調試時我使用控制檯下方的Quick Look圖標檢查table變量,我可以看到表格。

UPDATE

我意識到自己的做法是不是一個好一個。

我實現我希望通過我做的查看和UITableViewDataSource一個UITableViewDelegate子視圖和編程方式創建一個UITable和所需TableViewCell結果。瘋狂的代碼量!

回答

1

此處顯示的UITableView出現在故事​​板上並與UITableViewController相關聯。

在這種情況下,您所做的是完全非法的,這就是爲什麼它不起作用。您不能只調用instantiateViewControllerWithIdentifier,抓住視圖控制器的視圖,並將該視圖填入與addSubview的接口。

畢竟,想一想:如果你這樣做,發生什麼事情的視圖控制器?它不存在,而你有一個完全沒有功能的觀點。

還有就是你需要爲了使TableController一個子視圖控制器的self(當前視圖控制器做了嚴格的舞蹈 - 和你沒有做舞蹈

+0

有關的細節跳舞,看到我的答案在這裏:http://stackoverflow.com/a/8746580/341994這是在2012年,但規則並沒有改變,按照他們 - 在這裏它是在現代Swift:https: //github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p316containerController/ch19p631containerController/ViewController.swift – matt

+0

有沒有其他辦法可以訪問那個UITableView?我在xib文件中找不到容器視圖所以我不得不訴諸這個馬dness。正如你所看到的,我非常渴望完成這件事。 – JadeSync

+0

我不知道你的意思是「任何其他方式」。我所建議的很容易。我向你展示了代碼。爲什麼不這樣做呢?您只需添加幾行代碼即可。 – matt

相關問題