UITableView добавить строку из другого Viewcontroller - PullRequest
0 голосов
/ 29 мая 2018

У меня есть два контроллера представления, один с тремя представлениями таблиц, а другой контроллер. У меня есть поле uitext и текст, введенный в текстовое поле. Я хочу добавить его в один из представлений таблицы с именем ScheduleTableView в другом контроллере представления.Вот мой код, но я получаю сообщение об ошибке неожиданно обнаружил ноль при развертывании необязательного значения в 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 голосов
/ 29 мая 2018

Проблема в том, что вы пытаетесь обновить контроллер представления внутри функции prepare.Внутри этой функции создается представление, но его выходы еще не подключены.

Чтобы решить эту проблему, выполните следующие действия:

В этом методе вы должны сначала обновить вашу модель:

@IBAction func addButtonTapped(_ sender: YTRoundedButton) {
   // update your model here

   self.performSegue(withIdentifier: "secondvc", sender: self)    
}

В контроллере представления назначения вы должны обработать этоизмените модель и перезагрузите данные табличного представления.

override func viewDidLoad() {
    self.tableView.reloadData()
}
0 голосов
/ 30 мая 2018

Разрешение для этого менялось там, где был объявлен массив (синглтон подходит для этого), и убирало ненужные вставки, обновления, перезагрузки и т. Д.

Затем метод 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)

  }     
}
0 голосов
/ 29 мая 2018

vc.ScheduleArray.count - 1 вероятно, отрицательный путь индекса

попробуйте это

if (vc.ScheduleArray.count - 1 >= 0){
    vc.ScheduleTableView.insertRows(at: [indexPath], with: .automatic)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...