Попытка обновить представление коллекции, используя завершение оповещения - PullRequest
0 голосов
/ 18 марта 2019

У меня есть экран с представлением коллекции и элемент кнопки панели со знаком плюс.При нажатии знака «плюс» появляется окно с предупреждением, в котором пользователь может добавить информацию в список.После нажатия OK я пытаюсь обновить представление коллекции, но я делаю что-то не так.

Оператор печати "passed guard" достигнут, и я могу получить введенную информацию.Просто не могу обновить вид, чтобы отразить это, не уходя и не возвращаясь.Любое руководство?Я сталкивался с этим на самом деле несколько раз, поэтому я явно что-то упускаю.Большое спасибо заранее.

    @objc func newButtonPressed() {
        let alert = UIAlertController(title: "Add", message: "", preferredStyle: .alert)

        alert.addTextField { (textField) in
            textField.placeholder = "Name"
        }

        alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
            var name = ""
            guard let textFields = alert.textFields else { return }
            guard let navController = self.parent as? UINavigationController else { return }
            guard let settingsVC = navController.topViewController as? SettingsVC else { return }

            print("passed guard") // success

            DispatchQueue.main.async {
                settingsVC.collectionView.reloadData()
                settingsVC.view.backgroundColor = .red

                // For testing purposes, explicitly using main thread and setting to red
            }
        }))
        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        present(alert, animated: true, completion: nil)
    }

1 Ответ

1 голос
/ 18 марта 2019

Может быть, вам нужно изменить источник данных коллекции

guard let textFields = alert.textFields else { return }

settingsVC.arr.append(textFields.first!.text!) // arr is collection dataSource
settingsVC.collectionView.reloadData()
...