UITableView从其他Viewcontroller添加行

时间:2018-05-29 15:32:56

标签: ios swift xcode uitableview uitextfield

我有两个视图控制器,一个带有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)

  }     
}

3 个答案:

答案 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()
}