我想知道如何以编程方式创建分组/分区的tableview。我试图创建的设计是:
我希望顶部有一个UIImageView
,高度为160,然后是3个部分,每个部分都有不同的行数。然后我会在每一行中放置静态标签,然后用我的数据更新它们的标签。
此VC的代码如下:
import UIKit
class SelectedFilmTableViewController: UITableViewController {
var film: Film? {
didSet {
navigationItem.title = film?.Film_Name
}
}
var cellId = "cellId"
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellId)
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = film?.Directed_By
cell.detailTextLabel?.text = film?.Film_Poster_Image_URL
return cell
}
}
我尝试添加方法来说明numberOfSections
等,但我在构建应用时似乎没有看到它们。我所看到的只是一个看似正常的桌面视图。我错过了一些设置吗?
因为我以编程方式导航到此VC,所以我需要在不使用故事板的情况下进行设置。
感谢所有关于如何创建我需要的外观的帮助,谢谢!
答案 0 :(得分:3)
将其他视图与TableView组合时,我更喜欢制作UIViewController并使用UITableViewController作为嵌入式控制器。
我承诺an example on github检查出来
以下是您的表控制器代码应如下所示:
class MyTableController : UITableViewController {
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if(section == 2) {
return "Film Information"
} else {
return " "
}
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(section == 0) {
return 1
} else if(section == 1) {
return 2
} else {
return 4
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("SomeCell", forIndexPath: indexPath) as UITableViewCell
return cell
}
}
答案 1 :(得分:1)
首先,你应该使用以下方法返回3节
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
然后根据传递给此方法的节号返回每个节的1,2和4(行):
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// return if section == 0 return 1 and so on...
}
最后使用indexPath传递给此方法,根据indexPath中存储的section和row返回相应的内容:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as UITableViewCell
// if indexPath.section == 0 {
// cell.textLabel?.text = film?.Directed_By
// cell.detailTextLabel?.text = film?.Film_Poster_Image_URL
// } else if ....
return cell
}
答案 2 :(得分:0)
您忘了拨打reloadData
。将viewDidLoad
方法更新为
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellId)
tableView.reloadData()
}
如果您需要3个行数不同的部分,请将方法更改为
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return [1,2,4][section]
}
要将图像添加到顶部,请使用UITableView的属性tableHeaderView
。