我正在尝试掌握TableViews的使用,我正在尝试以编程方式填充一个。它进展顺利,但是我想修改这个程序来创建空的部分而不是预先填充的部分。
>>> sum(['a','b','c'], '')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]
我可以看到import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var rowCount = 1
var sectionCount = 1
func numberOfSections(in tableView: UITableView) -> Int {
return sectionCount
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "Section \(section+1)"
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return rowCount
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath)
cell.textLabel?.text = "Entry \(indexPath.row+1) in Section \(indexPath.section+1)"
return cell
}
// func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//
// }
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var onSect: UISwitch!
@IBOutlet weak var addToTable: UIButton!
@IBAction func insertToTable(_ sender: Any) {
insert()
}
func insert(){
if onSect.isOn{
sectionCount += 1
}else{
rowCount += 1
}
tableView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
基本上是基于tableView函数重新创建了表格,但是在reloadData()
期间,我想不出任何方法来创建一个节而不填充行。调用
答案 0 :(得分:0)
你必须了解delegation pattern & data source使用过的可可触摸(以及可可)。
TableView将其数据的知识委托给dataSource。
就此而言,dataSource必须实现特定的方法,在您的情况下,我们最感兴趣的是:
func numberOfSections(in tableView: UITableView) -> Int
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
这两个函数将命令tableview的内容。 要发出的第一个函数是:
func numberOfSections(in tableView: UITableView) -> Int
根据你返回的内容,它将调用第二个方法,如果你希望你的tableview一起为空,那么你可以为这个数字返回0,因此其他函数甚至不会被调用。
如果你为numberOfSections
返回5,那么你会得到另一个函数,并且你可以根据你得到的section index参数返回你想要的行数。
以下是5个部分的示例,其中第三个部分为空,其余部分只有一行:
func numberOfSections(in tableView: UITableView) -> Int {
return 5
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 2 {
return 0
}
return 1
}