不知道节中的行数(swift)

时间:2016-12-12 18:55:15

标签: ios swift uitableview

在我的构思中,每一行tableview都是你可以填写的任务。每次你打开应用程序时,一行应该是tableView上的先验。 (如图所示)

此外,我还有一个允许您添加行的按钮。 但我不知道如何知道节中的行数。 你能帮帮我一下吗?(在我的代码中,我评论了一些我无法理解的时刻)

class TaskSecondViewController: UIViewController,UITableViewDataSource{

 @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        self.tableView.separatorColor = UIColor.clear

 @IBAction func insert_rows(_ sender: Any) {

   let indexPath = IndexPath(row: 1, section: 1) // Don't know what to write in "row"
    self.tableView.insertRows(at: [indexPath], with: .top)

    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return 1 // Here also
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TaskTableViewCell

        return cell
    }

}

4 个答案:

答案 0 :(得分:1)

  

但我不知道如何知道节中的行数。

要理解的重要一点是,表格不知道它显示的项目,或者如何显示它们,或者当人们与它们交互时要做什么。表格实际上只是一个部分列表,其中每个部分都是一个单元格列表。它可以滚动。它可以寻求帮助。

显示的项目保存在其他位置。它们甚至不是同时存在于表中的行中。该表仅保留需要显示的行数,并且当用户滚动时,它会要求其他对象显示更多行,并抛出不再显示的行。另一个对象是数据源,它可能是保存项目的“其他地方”,或者它可能只是一个知道在哪里找到(或生成)这些项目的对象。

在这种情况下,您的TaskSecondViewController视图控制器是表的数据源。您需要确保该控制器以某种方式访问​​所需的数据。也许它从文件中读取列表。也许从一些其他对象传入一个项目数组。这个主题有一百万种变化,但是你要知道你想要在表格中显示什么,并知道这些东西的保存位置。一旦你知道,你应该能够弄清楚给定部分中有多少项。您还需要知道有多少部分。可能你只有一个项目列表,而你不打算把它分成几个部分;在这种情况下,您只需返回1表示该部分的行数和整个列表中的项目数,即该部分中的行数。

答案 1 :(得分:1)

你可以简单地拥有

var numOfRow = 0

每次按下按钮

numberOfRow += 1
tableView.reloadData()

所以你可以返回numberOfRow

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return numOfRow
}

答案 2 :(得分:1)

你尝试过这个:

  

yourTableView.numberOfRows(inSection: 0)

这将返回表格视图

中的行数

答案 3 :(得分:0)

如果您只想添加一行,则无需在显式位置将其插入表视图中。拥有一个数组(或字典或其他)并将项目添加到该对象中会更容易,然后在添加项目时重新加载表视图。

var itemsToDisplay = [SomeObject]

override func viewDidLoad() { 

    // populate items if needed

}

@IBAction func insert_rows(_ sender: Any) {

   // get your data to create your object
   // add your object to itemsToDisplay
   itemsToDisplay.append(myObject)

   // for a TableViewController
   self.tableView.reloadData()

   // if you've included the tableView as an @IBOutlet
   myTableView.reloadData()

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return itemsToDisplay.count // this might be zero, but it doesn't matter
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TaskTableViewCell

    var item = itemsToDisplay[indexPath.row]

    cell.titleLabel.text = item.whatever

    return cell
}