2017-01-23 2 views
1

Ich habe eine Schaltfläche in meiner Sicht Klasse versucht, eine Auswahlfunktion aus einer separaten Klasse hinzuzufügen, wie folgt:Swift 3: Unerkannte Selektor Instanz gesendet

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

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

Ich bin ein Unbekannter Selektor Fehler bekommen, wenn ich versuche auf diese Methode außerhalb von ProfileView verweisen. Allerdings funktioniert es, wenn ich einfach createAccountClicked() in ProfileView setzen und rufen:

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

statt. Meine Frage ist - Ist es möglich, eine Funktion aus einer separaten Klasse aufzurufen? Oder wäre nur die Funktion in der gleichen Klasse das richtige Designmuster?

+0

Mit 'addTarget' am Ort der' self' müssen Sie den Verweis von 'ProfileViewController' passieren. –

+0

'ProfileViewController.self' funktioniert! –

Antwort

0

Für Ihr Problem versuchen, den Code wie unten zu ändern:

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

Ist es möglich, eine Funktion aus einer separaten Klasse zu nennen? Oder wäre nur die Funktion in der gleichen Klasse das richtige Designmuster?

Ja, Sie können eine Funktion von außen aufrufen, indem Sie eine Klassenfunktion oder ein Objekt dieser Klasse deklarieren. Überprüfen Sie die Klassenfunktion unter

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