2015-02-04 18 views
5

sto chiamando una funzione di classe dalla mia classe ViewController in questo modo:Accesso IBOutlet da un'altra classe

Buttons.set_cornerRadius(10) 

Ho un altro .swift file in cui ho la funzione dichiarata:

class Buttons { 

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

Quando ho' m provando a eseguire ciò genera l'errore: "Unexpectedly found nil while unwrapping an optional Value".

Ho controllato già le connessioni Storyboard-IBOutlet. Tutto è collegato correttamente.
Se chiamo il metodo nella stessa classe come questo, tutto funziona:

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 
    } 
} 

Come posso risolvere questo problema? Cosa sto sbagliando/non capendo bene?

Grazie in anticipo.

+1

È necessario accedere a una istanza reale di 'ViewController' e non a qualche istanza generica – Ian

+0

Puoi darmi qualche esempio di codice su come farlo? – smnk

+0

Perché non basta impostare il raggio dell'angolo nel ViewController? – Ian

risposta

4

È possibile accedere a un generico ViewController, ma è necessario utilizzare uno esistente UIView. Fare qualcosa di simile:

class Test: UIViewController { 

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

In questo modo, si passa la UIView che si desidera impostare l'angolo-raggio.

+0

Ho intenzione di provare questo! :) – smnk

+0

Sembra funzionare se uso la classe func set_cornerRadius (yourView: ViewController, radius CGFloat) {un po 'di codice} e lo chiamo con set_cornerRadius (self, 10) – smnk

2

si estende la classe ViewController in questo modo:

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

Ora è possibile chiamare questo metodo nel file originale ViewController utilizzando: set_cornerRadius(someValue) nel vostro viewDidLoad o dove vuoi. Puoi inserire questa estensione in un file diverso.

+0

Questo è perfetto! Grazie Signore! – smnk

Problemi correlati