在我的构思中,每一行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
}
}
答案 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
}