【问题标题】:How do you assign an IBOutlet programmatically using Swift?如何使用 Swift 以编程方式分配 IBOutlet?
【发布时间】:2015-05-07 21:59:35
【问题描述】:

我以编程方式向视图控制器添加了一个条形按钮项:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Menu", style: .Plain, target: nil, action: nil)
}

现在我想以编程方式将该栏按钮项分配给IBOutlet。我将如何使用 Swift 来做到这一点?

【问题讨论】:

  • IBOutletIB 代表 Interface Builder,它表示从接口构建器到源代码的连接。以编程方式分配IBOutlet 意义不大。你实际上想做什么?

标签: ios swift uinavigationcontroller uibarbuttonitem


【解决方案1】:

IBOutletIB 代表 Ininterface Builder,它表示从接口构建器到源代码的连接。以编程方式分配 IBOutlet 意义不大。

IBOutlet 只是一个类的实例变量,它与接口的一部分相关联,或者可以通过接口构建器设置。如果我们想要对我们的按钮的引用(就像我们在界面构建器中创建它时我们会引用它一样),我们只需向我们的类添加一个属性,然后将我们新创建的按钮分配给它:

class MyViewController: UIViewController {

    var someBarButton: UIBarButtonItem?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.someBarButton = UIBarButtonItem(title: "Menu", style: .Plain, target: nil, action: nil)
        self.navigationItem.leftBarButtonItem = self.someBarButton
    }
}

现在,someBarButton 是我们的“IBOutlet”。


一些注意事项...

很有可能我们实际上并不想以这种方式做事。

这会为按钮创建一个额外的强引用(self.navigationItem 已经拥有对其leftBarButtonItem 的强引用)。

您会注意到,如果您从界面生成器创建一个IBOutlet,它就会被设置为一个weak 属性。那么也许我们想要一个弱属性?

但我们实际上可以做得更好。试穿这个尺寸:

var leftNavBarButton: UIBarButtonItem? {
    get {
        return self.navigationItem.leftBarButtonItem
    }
    set (newValue) {
        self.navigationItem.leftBarButtonItem = newValue
    }
}

现在,self.leftNavBarButton 本质上只是一种访问self.navigationItem.leftBarButtonItem 的便捷方式。

【讨论】:

    【解决方案2】:

    您的意思是在代码中而不是在 IB 中为按钮分配一个动作。您的问题措辞有些混乱,但没关系。

    您使用UIBarButtonItem 构造函数的targetaction 参数。 target 是你的控制器,通常是 selfaction 是一个字符串,它是该控制器包含的按钮处理程序的选择器签名。

        self.someBarButton = UIBarButtonItem(title: "Menu", style: .Plain, 
            target: self, action: "buttonHandler:")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2014-11-28
      相关资源
      最近更新 更多