我想制作一个这样的自定义视图:
如您所见,此视图仅依赖于iOS库中的对象:UILabel和UISlider。 我想添加尽可能多的"元素" (名称+滑块+百分比)我想要的。所以我想创造一个"单位"像这样看:
然后,以编程方式添加我想要的数字。
所以,为此,我必须创建一个新的UIView文件,但是,我在哪里添加UILabel,UISlider?在initWithFrame方法中?约束是否也放在这个方法中?或者在" viewDidLoad"方法?
感谢您的指导
答案 0 :(得分:1)
只需创建一个自定义初始化。 例如:
-(instancetype)initWithLabelText:(NSString*)text andSliderValue:(NSInteger)sliderValue {...}
在自定义视图类中,您具有滑块和标签的全局属性。使用传递的值初始化。更改滑块值的方法以及添加到该类的标签
答案 1 :(得分:0)
创建一个新类并使其继承自UIView
然后为要控制的所有UI元素创建公共属性。或者,将UI元素设为私有,并为其值提供公共对应元素
覆盖layoutSubviews()
以将UI元素添加为子视图(确保您不会通过检查nil多次添加它们)并更新其帧。
或者,在init函数中添加它们,如果您不想处理帧,则添加自动布局约束。
这是一个很好的起点:
class CustomView: UIView {
// MARK: -------------------------
// MARK: Properties
var nameLabel: UILabel!
var slider: UISlider!
var percentLabel: UILabel!
// MARK: -------------------------
// MARK: Initialization
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Anything that needs to be initialized when loaded from xib or storyboard
}
override init(frame: CGRect) {
super.init(frame: frame)
// Anything that needs to be initialized when loaded programatically
}
// MARK: -------------------------
// MARK: Layout
override func layoutSubviews() {
super.layoutSubviews()
if nil == nameLabel {
nameLabel = UILabel(frame: CGRectZero)
// Set other attributes here
addSubview(nameLabel)
}
// Update the name label frame here
if nil == slider {
slider = UISlider(frame: CGRectZero)
// Set other attributes here
addSubview(slider)
}
// Update the slider frame here
if nil == percentLabel {
percentLabel = UILabel(frame: CGRectZero)
// Set other attributes here
addSubview(percentLabel)
}
// Update the percent label frame here
}
}