从另一个类访问IBOutlet

5

我正在从我的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
    }
}

我该如何解决这个问题?我做错了什么或者没有理解对吗?
提前感谢您的帮助。

1
你需要访问一个真正的 ViewController 实例,而不是一些通用的实例化。 - Ian
你能给我一些关于如何做这个的示例代码吗? - smnk
为什么不在您的ViewController中设置圆角半径呢? - Ian
这只是我提供的一些示例代码。我还有很多按钮要处理。如果有意义的话,我不想把所有这些文本放在同一个.swift文件中的其他方法中:D - smnk
2
如果所有的按钮都在同一个UIViewController上,只需创建一个ViewController的扩展即可,这样就不需要将它放在同一个文件中了。 - Ian
2个回答

4
您访问了一个通用的ViewController,但需要使用现有的UIView。可以尝试执行以下操作:
class Test: UIViewController {

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

那样,您只需传递您想要设置圆角半径的 UIView

我要试一下这个! :) - smnk
如果我使用类方法 "set_cornerRadius",代码中写入如下:func set_cornerRadius(yourView: ViewController, radius CGFloat) {some code}并且调用方法时写成set_cornerRadius(self, 10),那么它似乎是可以工作的。 - smnk

2
你可以这样扩展你的ViewController类:
extension ViewController {
    func set_cornerRadius(radius: CGFloat) {
         someButton.layer.cornerRadius = radius
    }
}

现在,您可以在原始的ViewController文件中使用set_cornerRadius(someValue)来调用此方法,无论是在viewDidLoad还是其他任何地方。您可以将此扩展放在不同的文件中,但请保留HTML标签。

太好了!谢谢先生! - smnk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接