从另一个类访问IBOutlet

时间:2015-02-04 22:27:22

标签: ios class swift null iboutlet

我正在调用ViewController类中的类函数,如下所示:

Buttons.set_cornerRadius(10)

我有另一个.swift文件,我声明了这个函数:

class Buttons {

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

当我试图运行它时会抛出错误:"Unexpectedly found nil while unwrapping an optional Value"

我已经检查了 Storyboard-IBOutlet 连接。一切都是正确的。
如果我像这样在同一个类中调用该方法,一切正常:

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

我该如何解决这个问题?我做错了什么/不理解对不对?

提前致谢。

2 个答案:

答案 0 :(得分:4)

您可以访问通用ViewController,但需要使用现有的UIView。做这样的事情:

class Test: UIViewController {

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

这样,您传递了想要设置角半径的UIView

答案 1 :(得分:2)

您可以像这样扩展ViewController类:

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

现在,您可以使用ViewController中的set_cornerRadius(someValue)或您想要的任何地方,在原始viewDidLoad文件中调用此方法。您可以将此扩展程序放在不同的文件中。