如何在自定义视图类中动态替换自定义子视图?

托马斯·纳扎连科

给定两种类型的视图RoundedIcon: UIView

  • class ContactRoundedIcon: RoundedIcon
  • class PhoneRoundedIcon: RoundedIcon

和一ContactItem类类型UIView

class ContactItem: UIView {
    var icon: RoundedIcon = PhoneRoundedIcon()

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    func commonInit() {
        translatesAutoresizingMaskIntoConstraints = false

        addSubview(icon)
    }

    /* ... */

    NSLayoutConstraint.activate([
        icon.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 0),
        icon.topAnchor.constraint(equalTo: topAnchor, constant: 0)
    )]
}

和一个班级 class ContactDropDownList: UIControl

当我分配ContactRoundedIconcontactItem.icon财产时。

class ContactDropDownList: UIControl {
    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    func commonInit() {
        let contactItem = ContactItem()
        contactItem.icon = ContactRoundedIcon()
        self.addSubview(contactItem)
}

然后图标不会从PhoneRoundedIcon变为ContactRoundedIcon至少我没有在模拟器中看到它。

ContactDropDownList视图被添加为故事板中的子视图。其余的视图以编程方式编写。当他们自己时,他们没事。ContactItem实例中的图标分配不起作用。

怎么了?如何更改图标?

米兰诺萨

试试这个:

class ContactItem: UIView {
    var icon: RoundedIcon = PhoneRoundedIcon() {
        didSet {
            // get rid of the old icon
            oldValue.removeFromSuperview()
            // add a new one
            addSubview(icon)
            // setup layout (I'm not sure if you use autolayout or set frames, but I don't see any layout setup, which might also be a problem)
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    func commonInit() {
        translatesAutoresizingMaskIntoConstraints = false

        addSubview(icon)
    }
    ...
}

didSet你需要摆脱旧的图标,并添加一个新的视图。否则,您看到旧图标是正常的(`commonInit' 在初始化程序中被调用,当您设置新图标时,它已全部设置完毕,不会再次被调用)。

此外,您还没有显示任何布局代码,因此请确保正确设置框架,如果使用自动布局,请确保设置约束。

编辑

旧视图本身不必删除。但是您应该删除它,除非您确实有充分的理由将其保留在那里。首先,您希望释放未使用的对象。通过将其保留在视图中,您将保留它。其次,如果新的icon有一些透明的部分(或比旧的小),旧的部分icon将是可见的。我想你也不想要。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法隐藏自定义子视图

来自分类Dev

如何重绘自定义UIView的自定义子视图

来自分类Dev

如何在自定义列表视图的自定义适配器类中传递多个数组值?

来自分类Dev

如何处理“活动”中的自定义视图类?

来自分类Dev

如何在Django中自定义子弹字段?

来自分类Dev

如何在QML的TreeView中自定义子项?

来自分类Dev

如何在Android中过滤自定义列表视图

来自分类Dev

如何在Android中实现自定义堆栈视图?

来自分类Dev

如何在新的NavigationView中添加自定义视图

来自分类Dev

如何在Python中创建自定义分组视图?

来自分类Dev

如何在片段中实现自定义视图

来自分类Dev

如何在presentTextInputControllerWithSuggestions中自定义听写视图

来自分类Dev

如何在android中创建自定义视图

来自分类Dev

如何在Android Studio中将ImageView添加到自定义视图类中?

来自分类Dev

如何在表格视图单元格中隐藏自定义类标签?

来自分类Dev

如何在无关系的详细信息视图页面上添加自定义子面板

来自分类Dev

在自定义子类UICollectionViewCell类中添加Subview

来自分类Dev

Android:如何从自定义视图的超类获取属性

来自分类Dev

如何指定嵌套的自定义视图类?

来自分类Dev

如何在durandal / knockout中的自定义绑定中访问父视图或根视图模型

来自分类Dev

在 matplotlib 中自定义子图

来自分类Dev

如何在自定义视图中向多数据添加自定义数组?

来自分类Dev

如何在自定义视图中向多数据添加自定义数组?

来自分类Dev

自定义列表视图不会替换视图

来自分类Dev

如何检索自定义视图的状态?

来自分类Dev

如何自定义SecureSocial 3.0视图?

来自分类Dev

Android:如何创建自定义视图

来自分类Dev

如何快速使用自定义视图?

来自分类Dev

在Doxygen中自定义树视图

Related 相关文章

  1. 1

    无法隐藏自定义子视图

  2. 2

    如何重绘自定义UIView的自定义子视图

  3. 3

    如何在自定义列表视图的自定义适配器类中传递多个数组值?

  4. 4

    如何处理“活动”中的自定义视图类?

  5. 5

    如何在Django中自定义子弹字段?

  6. 6

    如何在QML的TreeView中自定义子项?

  7. 7

    如何在Android中过滤自定义列表视图

  8. 8

    如何在Android中实现自定义堆栈视图?

  9. 9

    如何在新的NavigationView中添加自定义视图

  10. 10

    如何在Python中创建自定义分组视图?

  11. 11

    如何在片段中实现自定义视图

  12. 12

    如何在presentTextInputControllerWithSuggestions中自定义听写视图

  13. 13

    如何在android中创建自定义视图

  14. 14

    如何在Android Studio中将ImageView添加到自定义视图类中?

  15. 15

    如何在表格视图单元格中隐藏自定义类标签?

  16. 16

    如何在无关系的详细信息视图页面上添加自定义子面板

  17. 17

    在自定义子类UICollectionViewCell类中添加Subview

  18. 18

    Android:如何从自定义视图的超类获取属性

  19. 19

    如何指定嵌套的自定义视图类?

  20. 20

    如何在durandal / knockout中的自定义绑定中访问父视图或根视图模型

  21. 21

    在 matplotlib 中自定义子图

  22. 22

    如何在自定义视图中向多数据添加自定义数组?

  23. 23

    如何在自定义视图中向多数据添加自定义数组?

  24. 24

    自定义列表视图不会替换视图

  25. 25

    如何检索自定义视图的状态?

  26. 26

    如何自定义SecureSocial 3.0视图?

  27. 27

    Android:如何创建自定义视图

  28. 28

    如何快速使用自定义视图?

  29. 29

    在Doxygen中自定义树视图

热门标签

归档