iOS在TableView中创建空部分

时间:2017-11-01 21:33:52

标签: ios swift uitableview

我正在尝试掌握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()期间,我想不出任何方法来创建一个节而不填充行。调用

1 个答案:

答案 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
}