gpt4 book ai didi

ios - @IBDesignable UIView 不在 Storyboard中调用 init

转载 作者:搜寻专家 更新时间:2023-11-01 05:47:17 25 4
gpt4 key购买 nike

我有一个 UIView@IBDesignable

@IBDesignable
class MyView: UIView {

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

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

private func sharedInit(){
translatesAutoresizingMaskIntoConstraints = false
backgroundColor = .blue
}

}

当我在 Storyboard中放置一个 UIView,并在 Identity inspector 中将其类分配给 MyView 时,UIView 仍然有一个默认的背景颜色。为什么它的背景颜色不是 Storyboard 中的 UIColor.blue?还有,请问我怎样才能做到这一点?

感谢您的帮助。

最佳答案

从 Storyboard初始化此 View 的初始化程序将在运行时调用,为了在编译时更新 Storyboard内的 View ,您应该尝试包含 prepareForInterfaceBuilder,它会在编译时更新 Storyboard xib 文件。

我建议您在创建@IBDesignable 类时做多件事:

  1. @IBDesignable标签标记类
  2. 使用 @IBInspectable 标记 UIView 属性,然后您将能够使用 StoryBoard
  3. 更改此属性的值
  4. 在该属性的willSet中设置配置代码,在属性取值前观察变化,或者在属性取值后didSet
  5. prepareForInterfaceBuilder() 中进行额外的设置,它覆盖了它的父类(super class) UIView

简单易行!

您的代码应如下所示:

swift 5:

import UIKit

@IBDesignable
class myView: UIView {

@IBInspectable var storyBoardColor : UIColor = .red {
willSet(myVariableNameToCatch) {
self.backgroundColor = myVariableNameToCatch
}
}

fileprivate func sharedInit(){
translatesAutoresizingMaskIntoConstraints = false
backgroundColor = storyBoardColor
}

override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
sharedInit()
}
}

myView 的 storyBoardColor 初始值为红色,您可以从 storyBoard 更改它;)

enter image description here

关于ios - @IBDesignable UIView 不在 Storyboard中调用 init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51497425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com