我有一个要求。我必须得到学生名单,然后我必须展示他们所在的科目。
示例
现在你可以在下面看到我有学生名单,即学生1,学生2,等等。每个学生都有不同数量的科目
到目前为止我做了什么:
我创建了一个包含Label和Empty垂直stackview的Custom单元格。
然后在方法 tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) 我运行for循环,动态生成一些UiLabel并将它们添加到垂直stackview
问题:通过这样做,我得到了我想要的东西。但是当我向上和向下滚动时,for循环会在每次向上/向下滚动时一次又一次地重复单元格中的数据
如果还有其他方法,请提供帮助。
答案 0 :(得分:1)
您可以将tableview与section。
一起使用这是tableview的部分示例。 https://blog.apoorvmote.com/uitableview-with-multiple-sections-ios-swift/
class TableViewController: UITableViewController {
let section = ["pizza", "deep dish pizza", "calzone"]
let items = [["Margarita", "BBQ Chicken", "Pepperoni"], ["sausage", "meat lovers", "veggie lovers"], ["sausage", "chicken pesto", "prawns", "mushrooms"]]
// MARK: - Table view data source
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return self.section\[section\]
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return self.section.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return self.items\[section\].count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath)
// Configure the cell...
cell.textLabel?.text = self.items[indexPath.section][indexPath.row]
return cell
}
自定义剖面视图 创建自定义视图并将视图显示为
部分override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x:0, y:0, width:tableView.frame.size.width, height:18))
let label = UILabel(frame: CGRect(x:10, y:5, width:tableView.frame.size.width, height:18))
label.font = UIFont.systemFont(ofSize: 14)
label.text = "This is a test";
view.addSubview(label);
view.backgroundColor = UIColor.gray;
return view
}
Sample code for Customised section
引用单元格的自定义标题
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCellWithIdentifier("HeaderCell") as! CustomHeaderCell
headerCell.backgroundColor = UIColor.cyanColor()
switch (section) {
case 0:
headerCell.headerLabel.text = "Student Name 1";
//return sectionHeaderView
case 1:
headerCell.headerLabel.text = "Student Name 2";
//return sectionHeaderView
case 2:
headerCell.headerLabel.text = "Student Name 3";
//return sectionHeaderView
default:
headerCell.headerLabel.text = "Other";
}
return headerCell
}
答案 1 :(得分:0)
您可以尝试不同的方法。制作一个包含部分数量的列表=学生数量。每个部分的行数应等于该学生的主题。这可以通过制作具有主题数组作为其属性的学生模型来轻松实现。
class Student: NSObject {
var subjectsArray : [String] = []
}
答案 2 :(得分:0)
首先将此扩展名添加到源代码中。
extension UIStackView{
func removeAllArrangedSubviews() {
let removedSubviews = arrangedSubviews.reduce([]) { (allSubviews, subview) -> [UIView] in
removeArrangedSubview(subview)
return allSubviews + [subview]
}
removedSubviews.forEach({ $0.removeFromSuperview() })
}
}
现在在您的自定义单元格类中重写此方法。它将在重用之前从stackview中删除所有子视图。
override func prepareForReuse() {
super.prepareForReuse()
self.stackView.removeAllArrangedSubviews()
}