我只是想知道您是如何使用 Swift 在 IOS 开发中正确设置 UI 的。通常,我觉得我需要在 View Controller 的 viewDidLoad 生命周期方法中放置很多语句来自定义 UI 元素。我知道我可以使用 Storyboard来帮助设置这些 UI 元素,但有时我们需要以编程方式进行一些调整。这些调整导致 viewDidLoad 中出现大量样板代码。 那么,你如何处理这个问题?您的扩展只用于 UI 部分吗?具体类(class)?如何清楚地将 UI 与逻辑分开?
最佳答案
为其制作自定义 View !
如果您发现自己编写了很多此类代码:
myView.someProperty1 = someValue1
myView.someProperty2 = someValue2
myView.someProperty3 = someValue3
myView.someProperty4 = someValue4
myView.someProperty5 = someValue5
myView.addSubView(subView1)
myView.addSubView(subView2)
myView.addSubView(subView3)
...
并且您赋予属性的值都独立于 View Controller ,可能是时候创建自定义 View 了。
这是一个例子:
为您的 View 创建一个xib
文件,并将其命名为与您的自定义 View 相同的名称。您将在此处添加自定义 View 的 subview 以及您需要的所有约束。
然后你可以这样做:
@INDesignable // add this if you want to see your view drawn on the storyboard!
class MyCustomView: UIView {
@IBOutlet var subView1: UIImageView!
@IBOutlet var subView2: UITextField!
@IBOutlet var subView3: UIImageView!
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
private func setupView() {
let view = viewFromNibForClass()
view.frame = bounds
view.autoresizingMask = [
UIViewAutoresizing.flexibleWidth,
UIViewAutoresizing.flexibleHeight
]
addSubview(view)
// set up your view here...
// set all the properties and stuff
}
private func viewFromNibForClass() -> UIView {
let bundle = Bundle(for: MyCustomView.self)
let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
return view
}
}
关于swift - 避免使用样板代码在 viewDidLoad 中设置 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752857/