2016-09-05 3 views
0

Когда вы нажимаете на экран, я пытаюсь получить функцию, которая находится в другом представлении. Контроллер, который будет называться usaully, просто выполнил бы viewControllerFuncIsIn(). NameOfFunc() , но поскольку класс контроллера представления, который имеет функцию im, пытающуюся вызвать, является SCNView. он дает мне эту ошибку с ns coder, потому что в настоящее время в Skscene enter image description here функция im, пытающаяся вызвать, находится в классе Ext1 прямо под viewdidload (не в нем).Как вызвать функцию с другого контроллера вида с разными классами

Обновление для комментариев ниже:

Extra1(coder:NSCoder())!.see() 

enter image description here

+0

У вас есть ошибка или ошибка? Вы пытаетесь использовать метод init 'init (withCoder coder:)' без передачи в кодере –

+0

да, я получаю сообщение об ошибке, обновляю свой код сейчас @Simon McLoughlin – Hunter

+3

Попробуйте использовать делегатов или уведомления –

ответ

2

Маленький пример для вас:

Используйте делегат, когда соединение является один к одному.

Делегат:

Создание протокола:

protocol TestViewControllerDelegate { 
    func finishTask(sender: TestViewController) 
} 

Создать ссылку для делегирования. Он должен быть слабым, это важно.

weak var delegate:TestViewControllerDelegate? 

Выйти из класса.

extension MainViewController: TestViewControllerDelegate { 
    func finishTask(sender: TestViewController) { 

    } 
} 

Вызов делегата:

delegate?. finishTask(self) 

Используйте уведомление, когда соединение один ко многим.

Извещение:

Добавить наблюдатель уведомления.

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ClassName.test), name:"NotificationIdentifier", object: nil) 

Почтовое уведомление.

NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil) 
+0

ok классно, но theres ошибка, которую я не могу исправить на слабом var delegate: TextViewControllerDelegate? он говорит, что слабые могут быть применены только к классу и классу proticol типа, а не к TestViewControllerDeleggate, и он будет продолжать говорить, что знаю, где я помещаю эту строку кода @Oleg Gordiichuk – Hunter

0

Я люблю ответ на мой вопрос

func mySelector(elem: AnyObject) { 
    Extra1().see() 
} 

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.mySelector), name: "see", object: nil) 

NSNotificationCenter.defaultCenter().postNotificationName("see", object: self)