2015-02-04 20 views
5

tôi kêu gọi một chức năng lớp từ lớp ViewController của tôi như thế này:Truy cập IBOutlet từ một lớp khác

Buttons.set_cornerRadius(10) 

Tôi có một .swift tập tin mà tôi có chức năng tuyên bố:

class Buttons { 

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

Khi tôi m cố gắng chạy nó nó ném lỗi: "Unexpectedly found nil while unwrapping an optional Value".

Tôi đã kiểm tra các kết nối Storyboard-IBOutlet rồi. Mọi thứ đều được kết nối đúng.
Nếu tôi gọi phương thức trong cùng một lớp như thế này, mọi thứ hoạt động:

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

Làm thế nào tôi có thể sửa lỗi này? Tôi đang làm gì sai/không hiểu đúng?

Xin cảm ơn trước.

+1

Bạn cần phải truy cập một phiên bản thực của 'ViewController' và không phải là một số cách diễn giải chung – Ian

+0

Bạn có thể cho tôi một số ví dụ về Code về cách thực hiện điều này không? – smnk

+0

Tại sao không chỉ đặt bán kính góc trong ViewController của bạn? – Ian

Trả lời

4

Bạn truy cập chung ViewController, nhưng cần sử dụng UIView hiện có. Làm một cái gì đó như thế này:

class Test: UIViewController { 

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

Bằng cách đó, bạn vượt qua UIView bạn muốn thiết lập góc-bán kính.

+0

Tôi sẽ thử điều này! :) – smnk

+0

Dường như nó hoạt động nếu tôi sử dụng class func set_cornerRadius (yourView: ViewController, radius CGFloat) {some code} và gọi nó với set_cornerRadius (self, 10) – smnk

2

Bạn mở rộng lớp ViewController bạn như vậy:

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

Bây giờ bạn có thể gọi phương pháp này trong gốc ViewController tập tin bằng cách sử dụng: set_cornerRadius(someValue) trong viewDidLoad của bạn hoặc bất cứ nơi nào bạn muốn. Bạn có thể đặt phần mở rộng này trong một tập tin khác.

+0

Đó là hoàn hảo! Cảm ơn ngài! – smnk

Các vấn đề liên quan