小编Foz*_*zle的帖子

在Swift中使用XIB自定义UIView子类

我正在使用Swift和Xcode 6.4来获得它的价值.

所以我有一个视图控制器,它将包含一些UILabels和UIImageViews.我想将UILabel-UIImageView对放入自定义UIView中,因此我可以在上述视图控制器中重复使用相同的结构.(我知道这可以翻译成UITableView,但为了〜学习〜请耐心等待我).事实证明,这是一个比我想象的更复杂的过程,我无法找到使这一切在IB工作的"正确"方法.

目前我一直在使用UIView子类和相应的XIB,重写init(frame :)和init(编码器),从nib加载视图并将其添加为子视图.这是我到目前为止在互联网上看到/阅读的内容.(这大概是这样的:http://iphonedev.tv/blog/2014/12/15/create-an-ibdesignable-uiview-subclass-with-code-from-an-xib-file-in-xcode-6) .

这给了我在init(编码器)和从bundle加载nib之间引起无限循环的问题.奇怪的是,这些文章或之前关于堆栈溢出的答案都没有提到这一点!

好的,我在init(编码器)中检查是否已经添加了子视图.这似乎是"解决了".但是当我尝试为它们分配值时,我开始遇到一个问题,我的自定义视图出口是零.

我做了一个didSet并添加了一个断点来看看...它们肯定是在某一点设置的,但是当我尝试修改标签的textColor时,该标签是零.我有点在这里撕扯我的头发.

可重用的组件看起来像软件设计101,但我觉得Apple正在密谋反对我.我应该在这里使用集装箱风险投资吗?我应该只是在我的主要VC中嵌套视图并拥有一个愚蠢的大量插座吗?为什么这么复杂?为什么每个人的例子都不适合我?

期望的结果(假装整个事情是VC,框是我想要的自定义uiviews):

在此输入图像描述

谢谢阅读.

以下是我的自定义UIView子类.在我的主要故事板中,我将UIViews与子类设置为他们的类.

class StageCardView: UIView {

@IBOutlet weak private var stageLabel: UILabel! {
    didSet {
        NSLog("I will murder you %@", stageLabel)
    }
}
@IBOutlet weak private var stageImage: UIImageView!

var stageName : String? {
    didSet {
        self.stageLabel.text = stageName
    }
}
var imageName : String? {
    didSet {
        self.stageImage.image = UIImage(named: imageName!)
    }
}
var textColor : UIColor? {
    didSet {
        self.stageLabel.textColor = textColor
    } …
Run Code Online (Sandbox Code Playgroud)

interface-builder xib uiview ios swift

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

interface-builder ×1

ios ×1

swift ×1

uiview ×1

xib ×1