Как перенести данные с правой кнопки на панели навигации на другой ViewController? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть панель навигации с двумя кнопками: Назад и Добавить. Мне нужно передать данные (UIImage) во второй View Controller (ViewControllerFilters2), когда я нажимаю на кнопку добавления. У меня есть функция «подготовиться к переходу», но она не работает. Когда я нажимаю «Добавить», я перехожу ко второму контроллеру, но у imageView нет изображения.

У меня также есть другая кнопка «Применить» на контроллере вида, и для этой кнопки эта функция работает, ноне для кнопки на панели навигации.

Я пытался изменить свой код, но у меня мало знаний, чтобы это сделать. И не знаю, в чем проблема.

Я хочу, чтобы моя кнопка «Добавить» выполняла ту же функцию, что и кнопка «Применить», т.е. я хочу удалить кнопку «Применить» и изменить ее на кнопку «Добавить»

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "✔", style: .plain, target: self, action: #selector(addTapped))
}

@objc func addTapped() {

    let filterTwoController = self.storyboard?.instantiateViewController(withIdentifier: "filter2") as! ViewControllerFilters2
    self.navigationController?.pushViewController(filterTwoController, animated: true)

}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        let nextController = segue.destination as? ViewControllerFilters2
        nextController?.filteredImage = imageView.image!

}

Ответы [ 3 ]

0 голосов
/ 01 октября 2019

Измените это:

@objc func addTapped() {

let filterTwoController = self.storyboard?.instantiateViewController(withIdentifier: "filter2") as! ViewControllerFilters2
self.navigationController?.pushViewController(filterTwoController, animated: true)
}

на это:

@objc func addTapped() {

let filterTwoController = self.storyboard?.instantiateViewController(withIdentifier: "filter2") as! ViewControllerFilters2
filterTwoController.filteredImage = imageView.image!
self.navigationController?.pushViewController(filterTwoController, animated: true)
}

Как сказал Ахмад Ф., вы вызываете navigationController? .PushViewController, который не связан с segue, поэтому вынужно установить изображение перед тем, как нажать контроллер вида.

0 голосов
/ 01 октября 2019
@objc func addTapped() {

let filterTwoController = self.storyboard?.instantiateViewController(withIdentifier: "filter2") as! ViewControllerFilters2
filterTwoController.filteredImage = imageView.image!
self.navigationController?.pushViewController(filterTwoController, animated: true)
}

, что должно решить вашу проблему, потому что navigationController? .PushViewController не имеет ничего , связанного с переходом

0 голосов
/ 01 октября 2019

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

  • Убедитесь, что на вашей раскадровке создан переход (от элемента навигации к следующему контроллеру представления). ,Если вы не знаете, как это сделать, отметьте this . Вы можете добавить кнопку панели из раскадровки, таким образом создавая переход.

  • В настоящее время вы звоните navigationController?.pushViewController, что не связано с переходом, чтоВы должны вместо этого позвонить:

    self.performSegueWithIdentifier ("SecondViewController", sender: self)

...