2015-02-04 27 views
5

ich so eine Klasse Funktion von meiner ViewController Klasse nenne:Zugriff IBOutlet von einer anderen Klasse

Buttons.set_cornerRadius(10) 

Ich habe eine andere .swift Datei, wo ich die Funktion haben, erklärt:

class Buttons { 

     class func set_cornerRadius(radius: CGFloat) { 
      ViewController().someButton.layer.cornerRadius = radius 
     } 
} 

Wenn ich Wenn ich versuche, das auszuführen, wird der Fehler ausgegeben: "Unexpectedly found nil while unwrapping an optional Value".

Ich überprüft die Storyboard-IBOutlet Verbindungen bereits. Alles ist richtig verbunden.
Wenn ich die Methode in der gleichen Klasse wie folgt aufrufen, alles funktioniert:

class ViewController: UIViewController { 

    @IBOutlet weak var someButton: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     set_cornerRadius(10) 
    } 

    func set_cornerRadius(radius: CGFloat) { 
     someButton.layer.cornerRadius = radius 
    } 
} 

Wie kann ich dieses Problem beheben? Was mache ich falsch/nicht richtig verstanden?

Vielen Dank im Voraus.

+1

Sie müssen auf eine reale Instanz von 'ViewController' und nicht auf eine generische Instanziierung zugreifen – Ian

+0

Können Sie mir ein Beispiel dafür geben, wie das geht? – smnk

+0

Warum nicht einfach den Eckenradius in Ihrem ViewController einstellen? – Ian

Antwort

4

Sie greifen auf ein generisches ViewController, aber müssen ein vorhandenes UIView verwenden. Tun Sie etwas wie folgt aus:

class Test: UIViewController { 

    class func set_cornerRadius(yourView: UIView, radius: CGFloat) { 
     yourView.layer.cornerRadius = radius 
    } 
} 

Auf diese Weise passieren Sie die UIView Sie wollen die Ecke Radius einzustellen.

+0

Ich werde das versuchen! :) – smnk

+0

Es scheint zu funktionieren, wenn ich Klasse func set_cornerRadius (yourView: ViewController, Radius CGFloat) {einige Code} und rufen Sie es mit set_cornerRadius (self, 10) – smnk

2

Sie Ihre Viewcontroller Klasse erweitern wie so:

extension ViewController { 
    func set_cornerRadius(radius: CGFloat) { 
     someButton.layer.cornerRadius = radius 
    } 
} 

Jetzt können Sie diese Methode in Ihrer ursprünglichen ViewController Datei aufrufen mit: set_cornerRadius(someValue) in Ihrem viewDidLoad oder wo immer Sie wollen. Sie können diese Erweiterung in eine andere Datei einfügen.

+0

Das ist perfekt! Danke mein Herr! – smnk

Verwandte Themen