我有两个视图控制器,一个带有3个tableviews,另一个控制器我有一个uitextfield,文本字段中输入的文本我想将它添加到另一个视图控制器中名为ScheduleTableView的tableview之一。
这是我的代码,但在vc.ScheduleTableView.beginUpdates()
@IBAction func addButtonTapped(_ sender: YTRoundedButton) {
self.performSegue(withIdentifier: "secondvc", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "secondvc" {
print(TitleTextField.text!)
let vc = segue.destination as! GrowthMainViewController
vc.ScheduleArray.append(TitleTextField.text!)
let indexPath = IndexPath(row: vc.ScheduleArray.count - 1, section: 0)
vc.ScheduleTableView.beginUpdates()
vc.ScheduleTableView.insertRows(at: [indexPath], with: .automatic)
vc.ScheduleTableView.reloadData()
vc.ScheduleTableView.endUpdates()
TitleTextField.text = ""
view.endEditing(true)
}
}
答案 0 :(得分:1)
对此的解决方案是更改声明数组的位置(单例对此没问题),并删除不必要的插入,更新,重新加载等。
numRowsInSection方法然后调用scheduleArray.count来显示所有相应的数据。
之前:
@IBAction func addButtonTapped(_ sender: YTRoundedButton) {
self.performSegue(withIdentifier: "secondvc", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "secondvc" {
print(TitleTextField.text!)
let vc = segue.destination as! GrowthMainViewController
vc.ScheduleArray.append(TitleTextField.text!)
let indexPath = IndexPath(row: vc.ScheduleArray.count - 1, section: 0)
vc.ScheduleTableView.beginUpdates()
vc.ScheduleTableView.insertRows(at: [indexPath], with: .automatic)
vc.ScheduleTableView.reloadData()
vc.ScheduleTableView.endUpdates()
TitleTextField.text = ""
view.endEditing(true)
}
}
之后:
@IBAction func addButtonTapped(_ sender: YTRoundedButton) {
self.performSegue(withIdentifier: "secondvc", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "secondvc" {
guard let text = TitleTextField.text else { return }
scheduleArray.append(text)
TitleTextField.text = ""
view.endEditing(true)
}
}
答案 1 :(得分:0)
vc.ScheduleArray.count - 1
可能是负索引路径
试试这个
if (vc.ScheduleArray.count - 1 >= 0){
vc.ScheduleTableView.insertRows(at: [indexPath], with: .automatic)
}
答案 2 :(得分:0)
问题是您尝试更新prepare函数内的视图控制器。在该函数内部,视图被实例化,但它的Outlets尚未连接。
要解决该问题,请按以下步骤操作:
在此方法上,您应首先更新模型:
@IBAction func addButtonTapped(_ sender: YTRoundedButton) {
// update your model here
self.performSegue(withIdentifier: "secondvc", sender: self)
}
在目标视图控制器中,您应该处理此模型更改并重新加载表格视图的数据。
override func viewDidLoad() {
self.tableView.reloadData()
}