在添加行之前,我正在更新我的numberOfRowsInSection,所以它不可能是那个。我还已经在viewDidLoad()方法中设置了表的委托和数据源。我不知道还有什么可能。相关代码应该在后两种方法中。对于上下文,我试图在每次在表视图中按下按钮时添加一行。
class LiveWorkoutViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{
//MARK: Properties
@IBOutlet weak var routineNameText: UILabel!
@IBOutlet weak var exerciseTableView: UITableView!
//VARIABLES
var routine: Routine?
var setNumber = 0
override func viewDidLoad() {
super.viewDidLoad()
exerciseTableView.delegate = self
exerciseTableView.dataSource = self
routineNameText.text = routine?.name
exerciseTableView.rowHeight = UITableViewAutomaticDimension
exerciseTableView.estimatedRowHeight = 300
// Do any additional setup after loading the view.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return setNumber
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:LiveWorkoutCell = self.exerciseTableView.dequeueReusableCell(withIdentifier: "LiveWorkoutCell") as! LiveWorkoutCell
return cell
}
func numberOfSections(in tableView: UITableView) -> Int {
return (routine?.exercises.count)!
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return routine?.exercises[section].name
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 30
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 30))
let doneButton = UIButton(frame: CGRect(x: 0, y: 0, width: 343, height: 30))
doneButton.center = footerView.center
doneButton.setTitle("Add Set", for: .normal)
doneButton.setTitleColor(#colorLiteral(red: 0, green: 0.4784313725, blue: 1, alpha: 1), for: .normal)
doneButton.backgroundColor = UIColor(displayP3Red: 0.9176470588, green: 0.9411764706, blue: 1, alpha: 1)
doneButton.tag = section
doneButton.addTarget(self, action: #selector(addSet(sender:)), for: .touchUpInside)
footerView.addSubview(doneButton)
return footerView
}
@objc func addSet(sender: UIButton!) {
print("Add set!")
print(sender.tag)
setNumber += 1
exerciseTableView.beginUpdates()
exerciseTableView.insertRows(at: [IndexPath(row: setNumber, section: sender.tag)], with: .automatic)
exerciseTableView.endUpdates()
}
答案 0 :(得分:0)
表中的第一行为0(即,比表中的行数少一)。
由于在调用setNumber
之前要递增insertRow
,所以传递的row
比应该的值高1;即setNumber
为1时,您需要插入第0行,但您要插入第1行。
插入行后,您可以简单地增加setNumber
。
@objc func addSet(sender: UIButton!) {
print("Add set!")
print(sender.tag)
exerciseTableView.beginUpdates()
exerciseTableView.insertRows(at: [IndexPath(row: setNumber, section: 0)], with: .automatic)
setNumber += 1
exerciseTableView.endUpdates()
}
答案 1 :(得分:0)
在@ Paulw11评论的帮助下,自己修复了该问题。
问题是我使用相同的变量表示所有节的行数,因此,当我添加一行时,它仅将其添加到一个节中,而setNumber表示所有节。解决方案是为所有部分插入行,或者使用其他方法来表示numberforRows