我正在尝试创建一个包含其他标签的标签类。
这是我的代码
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
class mainLabel: UILabel{
var top: UILabel! = UILabel()
top.text = "text" //*Expected declaration error
var down: UILabel! = UILabel()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
答案 0 :(得分:0)
您的代码存在一些问题。您收到的错误是因为您只能在类范围中声明变量或函数,并且使用top.text
您试图修改函数范围之外的类的实例属性,这是不允许的。
其次,你不应该在一个很少有意义的函数中声明一个类。
最后,如果您正在为其分配值,请不要将任何内容声明为隐式展开的可选项(UILabel!
)。
有几种方法可以创建一个由2 UILabel
组成的可重用UI元素,并且可以以编程方式创建。您可以将UIStackView
子类化为自动处理布局,或者如果您想要更多控制,可以简单地将UIView
子类化,将UILabel
添加为subView
并处理通过以编程方式添加Autolayout约束来进行布局。
这是使用UIStackView
子类的解决方案。修改任何属性以满足您的确切需求,这仅用于演示。
class MainLabel: UIStackView {
let topLabel = UILabel()
let bottomLabel = UILabel()
override init(frame: CGRect) {
super.init(frame: frame)
axis = .vertical
distribution = .fillEqually
addArrangedSubview(topLabel)
addArrangedSubview(bottomLabel)
topLabel.textColor = .orange
topLabel.backgroundColor = .white
bottomLabel.textColor = .orange
bottomLabel.backgroundColor = .white
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
在游乐场测试:
PlaygroundPage.current.needsIndefiniteExecution = true
let mainLabel = MainLabel(frame: CGRect(x: 0, y: 0, width: 300, height: 200))
PlaygroundPage.current.liveView = mainLabel
mainLabel.topLabel.text = "Top"
mainLabel.bottomLabel.text = "Bottom"