Как вызвать функцию в другом ViewController? - PullRequest
0 голосов
/ 20 июня 2020

Как я могу вызвать функцию / метод в другом быстром файле firstViewController, когда элемент управления / состояние находится во secondViewController. Во втором ViewController, когда кнопка нажата, secondViewController должен вызывать функцию в firstViewController и передавать элемент управления / состояние в thirdViewController, на который оно было передано из secondViewController.

secondViewController Button Action
@IBAction func EnterGallery(_ sender: Any){
// Want to invoke EnterGallery function in firstViewController and dismiss from secondViewController
self.dismiss(animated: true, completion: nil)}

firstViewController pushViewController function
func EnterGallery() {
let dest = self.storyboard?.instantiateViewController(withIdentifier:
"GalleryViewController") as! GalleryViewController // thirdViewController
 self.navigationController?.pushViewController(dest, animated: true)
 }

Обратите внимание: я не передаю никаких данных от secondViewController до firstViewController. Я просто хочу, чтобы мой firstViewController был pu sh to thirdViewController, в то время как я просто отклоняю от secondViewController, который был представлен из firstViewController с текущей функцией. Как только я увольняюсь из secondViewController, я хочу, чтобы мой экран go передавался напрямую третьемуViewController.

В основном я просто хочу вызвать функцию в другом ViewController без каких-либо данных, передаваемых из исходного ViewController. Поэтому я не могу использовать протоколы и делегатов или уведомления и наблюдателей. Как мне подойти к этому? Есть много других случаев, когда мне нужно использовать эту аналогичную функцию. Так что я не уверен, как именно это сделать. Поскольку я новичок в Swift, я буду благодарен за любую помощь. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Ваш viewController должен знать о других viewController и должен иметь возможность взаимодействовать с ними.

Вот хорошая статья о передаче данных между viewController'ами (или просто взаимодействии между viewControllers - как вы например)

Наиболее распространенной практикой является шаблон делегирования. В двух словах о делегировании:

Создайте протокол делегата:

protocol MyDelegate {
    func doSmth()
}

Добавьте свойство делегата в viewController, которое вызовет что-то в anotherViewController:

var delegate: MyDelegate?

anotherViewController должен соответствовать протоколу MyDelegate:

class anotherViewController: MyDelegate {
    func doSmth() {
        print("I am doing something")
    }
}

А затем назначить свой класс, соответствующий протоколу MyDelegate, в это свойство

viewController.delegate = anotherViewController

Вот и все! Теперь вы можете запускать метод делегата внутри viewController

delegate.doSmth()
0 голосов
/ 20 июня 2020

Шаблон делегата Google для этого. YT: https://youtu.be/DBWu6TnhLeY Надеюсь, это вам поможет. Кстати, шаблон делегата работает, даже если вы не хотите передавать данные между ними.

...