#ios #swift
#iOS #swift
Вопрос:
Я пытаюсь добавить метку в UIView, и я хотел бы просмотреть ее в InterfaceBuilder, однако, похоже, это не работает. я не только не вижу ярлык, но и не добавляю его для просмотра иерархии
@IBDesignable
class UIFloatingLabelInput: UIView {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
let Label : UILabel?
func AddLabel(){
Label?.text = "Hello World"
Label?.center = CGPoint(x: self.center.x, y: self.center.y)
self.addSubview(Label!)
}
override init(frame: CGRect){
//Init vars
Label = UILabel(frame: frame)
//Call Initializer
super.init(frame: frame)
AddLabel()
}
required init?(coder: NSCoder){
//Init vars
Label = UILabel(coder: coder)
//CallInitializer
super.init(coder: coder)
AddLabel()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
AddLabel()
}
}
но это не работает в IB, но отлично работает на устройстве.
Ответ №1:
Вам нужно указать свой фрейм метки, чтобы он работал в IB
required init?(coder: NSCoder){
//Init vars
Label = UILabel(coder: coder)
//CallInitializer
super.init(coder: coder)
//Give your label a frame
Label.frame = bounds
AddLabel()
}
Комментарии:
1. вы не можете использовать границы перед вызовом super.init, поскольку он не установлен. но я понимаю, что вы имеете в виду.