从另一个类访问IBOutlet [英] Accessing IBOutlet from another class

查看:173
本文介绍了从另一个类访问IBOutlet的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从 ViewController 类中调用类函数,如下所示:

  Buttons.set_cornerRadius(10)

我有另一个 .swift 文件中我声明函数:

  class Buttons {

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

当我试图运行它时会引发错误:在解包可选值时意外发现为nil / p>

我已经选中了 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
}
}

如何解决这个问题?



提前感谢。

解决方案

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

 类测试:UIViewController {

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

这样,你传递要设置拐角半径的 UIView


I am calling a class function from my ViewController class like this:

Buttons.set_cornerRadius(10)

I have another .swift file where I have the function declared:

class Buttons {

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

When I'm trying to run this it throws the error: "Unexpectedly found nil while unwrapping an optional Value".

I checked the Storyboard-IBOutlet connections already. Everything is connected right.
If I call the method in the same class like this, everything works:

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

How can I fix this? What am I doing wrong/not understanding right?

Thanks in advance.

解决方案

You access a generic ViewController, but need to use an existing UIView. Do something like this:

class Test: UIViewController {

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

That way, you pass the UIView you want to set the corner-radius.

这篇关于从另一个类访问IBOutlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆