单击时在 UITableView 中插入行
Inserting rows in UITableView upon click
单击 UIButton
后,我无法向 UITableView
添加行。
我有两个自定义单元格 xibs - 一个包含 UILabel
,另一个包含 UIButton
。
table 单元格的数据是从两个词典(answersmain
和 linesmain
)加载的。
这里是 UITableView
主要函数的代码:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.linesmain["Audi"]!.count + 1
}
// 3
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if(indexPath.row < 3){
var cell:TblCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TblCell
cell.lblCarName.text = linesmain["Audi"]![indexPath.row]
return cell
} else {
var celle:vwAnswers = self.tableView.dequeueReusableCellWithIdentifier("cell2") as! vwAnswers
celle.Answer.setTitle(answersmain["Good car"]![0], forState:UIControlState.Normal)
return celle
}}
我在这里放什么?
@IBAction func option1(sender: UIButton) {
// I need to add rows to the uitableview from two dictionaries into two different xibs
}
您需要修改 linesmain
和 answersmain
,向它们添加数据,然后调用 [self.tableView reloadData]
。
如果您提取 linesmain["Audi"]
和 answersmain["Good car"]
并将它们保存到不同的可变数组中并修改它们会更好。
您需要在 func option1
中执行此操作。
你应该看看文档 here
有一个名为 insertRowsAtIndexPaths:withRowAnimation:
的 UITableView
方法,它在指定的 indexPath 处插入行。
您可以执行下一步:
var showingAll = false
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return showingAll ? self.linesmain["Audi"]!.count + 1 : 0
}
@IBAction func option1(sender: UIButton) {
showingAll = true
tableView.beginUpdates()
let insertedIndexPathRange = 0..<self.linesmain["Audi"]!.count + 1
var insertedIndexPaths = insertedIndexPathRange.map { NSIndexPath(forRow: [=10=], inSection: 0) }
tableView.insertRowsAtIndexPaths(insertedIndexPaths, withRowAnimation: .Fade)
tableView.endUpdates()
}
单击 UIButton
后,我无法向 UITableView
添加行。
我有两个自定义单元格 xibs - 一个包含 UILabel
,另一个包含 UIButton
。
table 单元格的数据是从两个词典(answersmain
和 linesmain
)加载的。
这里是 UITableView
主要函数的代码:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.linesmain["Audi"]!.count + 1
}
// 3
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if(indexPath.row < 3){
var cell:TblCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TblCell
cell.lblCarName.text = linesmain["Audi"]![indexPath.row]
return cell
} else {
var celle:vwAnswers = self.tableView.dequeueReusableCellWithIdentifier("cell2") as! vwAnswers
celle.Answer.setTitle(answersmain["Good car"]![0], forState:UIControlState.Normal)
return celle
}}
我在这里放什么?
@IBAction func option1(sender: UIButton) {
// I need to add rows to the uitableview from two dictionaries into two different xibs
}
您需要修改 linesmain
和 answersmain
,向它们添加数据,然后调用 [self.tableView reloadData]
。
如果您提取 linesmain["Audi"]
和 answersmain["Good car"]
并将它们保存到不同的可变数组中并修改它们会更好。
您需要在 func option1
中执行此操作。
你应该看看文档 here
有一个名为 insertRowsAtIndexPaths:withRowAnimation:
的 UITableView
方法,它在指定的 indexPath 处插入行。
您可以执行下一步:
var showingAll = false
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return showingAll ? self.linesmain["Audi"]!.count + 1 : 0
}
@IBAction func option1(sender: UIButton) {
showingAll = true
tableView.beginUpdates()
let insertedIndexPathRange = 0..<self.linesmain["Audi"]!.count + 1
var insertedIndexPaths = insertedIndexPathRange.map { NSIndexPath(forRow: [=10=], inSection: 0) }
tableView.insertRowsAtIndexPaths(insertedIndexPaths, withRowAnimation: .Fade)
tableView.endUpdates()
}