从另一个 class 访问 IBOutlet

Accessing IBOutlet from another class

我正在从我的 ViewController class 中调用一个 class 函数,如下所示:

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 中调用方法,一切正常:

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

我该如何解决这个问题?我在做什么wrong/not理解对吗?

提前致谢。

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

class Test: UIViewController {

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

这样,你传递 UIView 你想要设置角半径。

你像这样扩展你的 ViewController class:

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

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