2017-01-23 2 views
1

у меня есть кнопка на мой взгляд, класс пытается добавить функцию выбора из отдельного класса следующим образом:Swift 3: Непризнанный селектор направил к экземпляру

class ProfileView: UIView { 
    createAccountButton.addTarget(self, action: #selector(ProfileViewController.createAccountClicked), for: .touchUpInside) 
} 

class ProfileViewController: UIViewController { 
    func createAccountClicked() { 
     print("button press") 
    } 
} 

Я получаю непризнанный ошибку выбора, когда я пытаюсь для ссылки на этот метод за пределами ProfileView. Однако это работает, когда я просто положить createAccountClicked() в ProfileView и называют:

createAccountButton.addTarget(self, action: #selector(self.createAccountClicked), for: .touchUpInside)

вместо этого. Мой вопрос: можно ли вызвать функцию из отдельного класса? Или бы просто иметь функцию в том же классе, чтобы следовать правильному шаблону проектирования?

+0

С 'addTarget' на месте' self' вам нужно передать ссылку на 'ProfileViewController'. –

+0

'ProfileViewController.self' работает! –

ответ

0

Для вашего вопроса попробуйте изменить код, как показано ниже:

class ProfileView: UIView { 
    createAccountButton.addTarget(ProfileViewController, action: #selector(ProfileViewController.createAccountClicked), for: .touchUpInside) 
} 

Можно ли вызвать функцию из отдельного класса? Или бы просто иметь функцию в том же классе, чтобы следовать правильному шаблону проектирования?

Да, Вы можете вызвать функцию извне, объявив функцию класса или объект этого класса. Проверьте функцию класса ниже

class ProfileViewController: UIViewController { 
class func someTypeMethod() { 
    //body 
} 
}