如何使用初始化程序为IBOutlet分配值?

丹·比尤(Dan Beaulieu)

我在某些我认为应该可以工作的事情上遇到了困难,我想知道关于初始化IBOutlets的值是否有些我不了解的事情。

因此,我创建了一个包含三个IBOutlet的类。然后,我为这些出口变量创建了初始化程序。当我创建该类的新实例并将其传递给硬编码的值时,我得到的回报为零

因此,我已经对传入的settingLabel值进行了println()处理,以确保传入的参数确实包含一个值,按预期它会返回“ hello”然后,我尝试将值分配给settingsLabel.text,但是当我调用println(settingsLabel.text)时返回nil

在此处输入图片说明 (线程1:EXV_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0))

我的问题是:

我在这里缺少什么和/或如何使用初始化程序为IBOutlet分配值?

这是我对初始化程序的调用:

let cell = SettingCell(settingLabel: "hello", settingSwitch: true, timeSetting: 3)

这是我的SettingCell.swift类:

class SettingCell: UITableViewCell {

    @IBOutlet weak var settingsLabel: UILabel!
    @IBOutlet weak var settingsSwitch: UISwitch!
    @IBOutlet weak var timeSetting: UILabel!

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

    init(settingLabel: String, settingSwitch: Bool, timeSetting: NSNumber) {

        println(settingLabel) // returns hello <--------------------

        super.init(style: .Default, reuseIdentifier: "SwitchSettingCell")
        settingsLabel.text = settingLabel
        self.settingsSwitch.on = settingSwitch
        self.timeSetting.text = timeSetting.description as String

        println(settingsLabel.text) // returns nil <--------------------

    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    var cellDelegate: SettingCellDelegate?


    @IBAction func handledSwitchChange(sender: UISwitch) {

        self.cellDelegate?.didChangeSwitchState(sender: self, isOn:settingsSwitch!.on)


    }

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

myStoryboard:

在此处输入图片说明

斯图尔特

IBOutlet关键字只是一种方式来告诉Xcode中的观点应该是你的故事板内可见。您可以将这些插座连接到情节提要中,这样可以实例化这些变量并将其作为情节提要中的子视图添加,而不是在代码中。

在您的代码中,您是通过编程方式而不是从情节提要中创建单元(实际上,如果您尝试从情节提要中创建单元,则您的应用可能会崩溃,因为您尚未实现init(coder:))。因此,您的变量没有理由成为“出口”,并且永远不会初始化。您必须自己初始化它们,将它们添加为子视图和设置约束,所有这些都在代码中。

在初始化程序中,代码无效,因为您的变量仍为nil实际上,在您的编辑中,您删除了可选的chaining ?,这将使您的应用程序崩溃,因为这些变量是强制展开的,但是是nilprintln(settingsLabel.text)是崩溃的相同原因


编辑:

好的,所以您的问题是您希望从情节提要中初始化单元格,而是通过调用自定义初始化程序以编程方式进行。在中tableView(_:cellForRowAtIndexPath:),您可以通过从重用队列中取出一个单元格来获得单元格:

let cell = tableView.dequeueReusableCellWithIdentifier("SettingsCell", forIndexPath: indexPath) as! SettingCell

(假设您已在情节提要中为单元原型提供了标识符“ SettingsCell”)

每当从情节提要中创建视图时,init(coder:)都会使用该视图的初始化程序,因此您必须在SettingCell子类中提供此实现单元出队后,将初始化单元的出口并将其添加为单元的子视图。

因此,在使单元出队后,您可以设置标签并切换:

cell.settingsLabel.text = //...
cell.settingsSwitch.on = //...
cell.timeSetting.text = //...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用值为0的对象初始化指针

来自分类Dev

在不断初始化中使用IBoutlet

来自分类Dev

如何在构造函数中使用初始化程序将二维数组设置为相同的值?

来自分类Dev

C ++程序为初始化变量提供垃圾值

来自分类Dev

为视图控制器初始化从IBoutlet变量初始化的变量?

来自分类Dev

如何使用对象初始化程序初始化WebClient?

来自分类Dev

分配+初始化内存使用机制

来自分类Dev

如何使用列表初始化对聚合类型进行值初始化

来自分类Dev

Rails 3.2:将值分配给嵌套属性时为“未初始化的常数”

来自分类Dev

为什么在用户为其分配值之前,我需要初始化该变量?

来自分类Dev

初始化程序与默认属性值

来自分类Dev

如何使用预定义值初始化字典?

来自分类Dev

如何使用默认值动态初始化数组?

来自分类Dev

使用聚合初始化和成员初始化程序初始化结构

来自分类Dev

如何在初始化程序中获取约束泛型的动态分配

来自分类Dev

动态分配的char数组显示为未使用构造函数初始化

来自分类Dev

使用初始化程序列表声明动态分配的数组的数组大小

来自分类Dev

如何使用初始化列表初始化地图

来自分类Dev

无法使用类型为JSON的参数列表调用类型为'Int'的初始化程序

来自分类Dev

使用失败的初始化程序崩溃

来自分类Dev

使用可变参数宏和函数时,“未初始化的值是由堆栈分配创建的”

来自分类Dev

无法使用类型为'Shape *'的左值初始化类型为'Shape Shape :: *'的返回对象

来自分类Dev

如何初始化表格栏位值?

来自分类Dev

未初始化的值是通过堆分配创建的

来自分类Dev

堆栈未初始化的值是由堆栈分配创建的

来自分类Dev

Valgrind:未初始化的值是由堆分配创建的

来自分类Dev

未初始化的值是通过堆栈分配创建的

来自分类Dev

静态分配对象的值初始化

来自分类Dev

Valgrind:未初始化的值是由堆分配创建的

Related 相关文章

  1. 1

    如何使用值为0的对象初始化指针

  2. 2

    在不断初始化中使用IBoutlet

  3. 3

    如何在构造函数中使用初始化程序将二维数组设置为相同的值?

  4. 4

    C ++程序为初始化变量提供垃圾值

  5. 5

    为视图控制器初始化从IBoutlet变量初始化的变量?

  6. 6

    如何使用对象初始化程序初始化WebClient?

  7. 7

    分配+初始化内存使用机制

  8. 8

    如何使用列表初始化对聚合类型进行值初始化

  9. 9

    Rails 3.2:将值分配给嵌套属性时为“未初始化的常数”

  10. 10

    为什么在用户为其分配值之前,我需要初始化该变量?

  11. 11

    初始化程序与默认属性值

  12. 12

    如何使用预定义值初始化字典?

  13. 13

    如何使用默认值动态初始化数组?

  14. 14

    使用聚合初始化和成员初始化程序初始化结构

  15. 15

    如何在初始化程序中获取约束泛型的动态分配

  16. 16

    动态分配的char数组显示为未使用构造函数初始化

  17. 17

    使用初始化程序列表声明动态分配的数组的数组大小

  18. 18

    如何使用初始化列表初始化地图

  19. 19

    无法使用类型为JSON的参数列表调用类型为'Int'的初始化程序

  20. 20

    使用失败的初始化程序崩溃

  21. 21

    使用可变参数宏和函数时,“未初始化的值是由堆栈分配创建的”

  22. 22

    无法使用类型为'Shape *'的左值初始化类型为'Shape Shape :: *'的返回对象

  23. 23

    如何初始化表格栏位值?

  24. 24

    未初始化的值是通过堆分配创建的

  25. 25

    堆栈未初始化的值是由堆栈分配创建的

  26. 26

    Valgrind:未初始化的值是由堆分配创建的

  27. 27

    未初始化的值是通过堆栈分配创建的

  28. 28

    静态分配对象的值初始化

  29. 29

    Valgrind:未初始化的值是由堆分配创建的

热门标签

归档