我对Swift编程还很陌生,现在我正在静态表视图的单元中实现动态表视图。我知道在stackoverflow上已经有很多解决方案,但是我意识到大多数解决方案都在Obj-C中,对此我还不太熟悉。
基本上,我有一个TableView在作为主表视图控制器一部分的静态表视图的一个单元格中设置为动态的。我现在遇到的问题是似乎没有一种方法可以在不为静态表视图声明它们的情况下实现数据源功能。我已经为动态表声明了@IBOutlet
(在这种情况下,我们称其为dynamicTableView
)。
如果override func numberOfSections(in tableView: UITableView)
不是1
,我设法通过返回tableView
使dynamicTableView
工作,如以下代码所示:
override func numberOfSections(in tableView: UITableView) -> Int {
if tableView == dynamicTableView {
return data.count
}
else {
return 1
}
}
但是,我现在遇到的问题是实现override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
。我不知道如果tableView
参数不是dynamicTableView
,而是对于静态表视图,将返回什么。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == dynamicTableView {
let cell = tableView.dequeueReusableCell(withIdentifier: "dynamic", for: indexPath) as! dynamicTableViewCell
cell.update(data[indexPath.row]) // A helper function declared in the dynamicTableViewCell.swift
return cell
}
else {
// What to return here?
}
}
谢谢!
编辑:我的意思是我似乎没有一个不会影响静态表格视图的cellForRowAt
数据源功能。
答案 0 :(得分:0)
如果numberForRows中有一个值,则必须像这样退格
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == bloggerReviewTableView {
let cell = tableView.dequeueReusableCell(withIdentifier: "dynamic", for: indexPath) as! dynamicTableViewCell
cell.update(data[indexPath.row]) // A helper function declared in the dynamicTableViewCell.swift
return cell
}
else {
// What to return here?
let cell = tableView.dequeueReusableCell(withIdentifier: "other", for: indexPath) as! OtherTableCell
return cell
}
}
//
但是如果返回值为零,则在cellForRowAt内部不需要if语句,因为不会为其他表调用
答案 1 :(得分:0)
如果静态tableview单元格非常不同,则可以将其单独子类化。 动态tableview / collectionview可以添加到静态tableview单元的必需子类中。
//静态表格视图的类
let reviewCellId = "reviewCell"
class StaticTableClass: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
//register static cell classes
tableView.register(ReviewCell.self, forCellReuseIdentifier: reviewCellId)
//..
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: reviewCellId, for: indexPath)
return cell
}
}
创建一个单独的ReviewCell类,其中将包含动态UITableView,
这样,一个类将只处理一个表视图的方法。
class ReviewCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource {
lazy var dynamicTableView: UITableView = {
let tv = UITableView()
tv.delegate = self
tv.dataSource = self
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupViews() {
addSubview(dynamicTableView)
dynamicTableView.register(UITableViewCell.self, forCellReuseIdentifier: "dynamicCellId")
}
// add further tableview methods in here
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
}
}