Swift:如何从json响应iOS创建动态布局
我想根据从服务器得到的json响应创建动态布局。我混淆了使用带约束的视图还是使用tableview来实现这种布局的方法。我研究的另一种方法是,生成不同种类的xib视图,在解析响应后,检查每个元素类型,并在tableview单元格中调用相应的视图。我只是想提出一个建议,我如何才能更好地创建这个布局 json响应是:Swift:如何从json响应iOS创建动态布局,ios,json,swift5,Ios,Json,Swift5,我想根据从服务器得到的json响应创建动态布局。我混淆了使用带约束的视图还是使用tableview来实现这种布局的方法。我研究的另一种方法是,生成不同种类的xib视图,在解析响应后,检查每个元素类型,并在tableview单元格中调用相应的视图。我只是想提出一个建议,我如何才能更好地创建这个布局 json响应是: "data": { "elementperrowtwo": { [ { “fieldid”: “1”, “fieldtype”
"data": {
"elementperrowtwo": {
[
{
“fieldid”: “1”,
“fieldtype”: “label”,
“fieldtext”: “OrderDate”,
“fieldcontrolno”: ”1”,
“displaycolumntype”: “2”
},
{
“fieldid”: “2”,
“fieldtype”: “textfield”,
“fieldtext”: “”,
“fieldcontrolno”: ”2”,
“displaycolumntype”: “2”
},
{
“fieldid”: “3”,
“fieldtype”: “label”,
“fieldtext”: “OurReference”,
“fieldcontrolno”: ”1”,
“displaycolumntype”: “2”
},
{
“fieldid”: “4”,
“fieldtype”: “textfield”,
“fieldtext”: “”,
“fieldcontrolno”: ”2”,
“displaycolumntype”: “2”
}
],
"elementperrowone": [
{
“fieldid”: “8”,
“fieldtype”: “label”,
“fieldtext”: “Buyer”,
“fieldcontrolno”: ”1”,
“displaycolumntype”: “1”
},
{
“fieldid”: “9”,
“fieldtype”: “textfield”,
“fieldtext”: “”,
“fieldcontrolno”: ”2”,
“displaycolumntype”: “1”
},
{
“fieldid”: “16”,
“fieldtype”: “dropdown”,
“fieldarray”: [
{
“id”: “1”,
“name”: “australia”
},
{
“id”: “2”,
“name”: “china”
},
{
“id”: “3”,
“name”: “India”
}
],
“fieldcontrolno”: ”3”,
“displaycolumntype”: “1”
}
]
}
实现动态布局的最佳方法是使用堆栈视图。使用xib可以初始化视图,并将其作为排列的子视图添加到stackview中 首先,您需要创建一个扩展函数,以便可以重用它
extension UIView {
func loadFromNib() {
Bundle.main.loadNibNamed(String(describing: type(of: self)), owner: self, options: nil)
}
}
在设计了xib之后,您所需要的就是从xib初始化视图以使用它。
下面是从xib初始化视图的代码
class FormLabelFieldCell: UIView {
@IBOutlet weak var contentView: UIView!
@IBOutlet weak var lblTitle: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
func commonInit() {
loadFromNib()
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
}
}
您可以将其作为子视图添加为
let cell = FormLabelFieldCell()
mainStack.addArrangedSubview(cell.contentView)
实现动态布局的最佳方法是使用堆栈视图。使用xib可以初始化视图,并将其作为排列的子视图添加到stackview中 首先,您需要创建一个扩展函数,以便可以重用它
extension UIView {
func loadFromNib() {
Bundle.main.loadNibNamed(String(describing: type(of: self)), owner: self, options: nil)
}
}
在设计了xib之后,您所需要的就是从xib初始化视图以使用它。
下面是从xib初始化视图的代码
class FormLabelFieldCell: UIView {
@IBOutlet weak var contentView: UIView!
@IBOutlet weak var lblTitle: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
func commonInit() {
loadFromNib()
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
}
}
您可以将其作为子视图添加为
let cell = FormLabelFieldCell()
mainStack.addArrangedSubview(cell.contentView)
谢谢你的建议@Nisarg Shah。我按照你的建议做了,结果是积极的。干杯……当然可以。我有一个查询,我想创建单文本字段和双文本在单行根据要求。那么我应该使用哪种方法来创建它呢。我应该为两者创建两个xib,然后根据单/双文本字段绘制吗?@ChetanLodhi如果你对自动布局有足够的了解,那么你应该选择单xib。如果你不需要再为设计更改头疼,你应该选择不同的xib。谢谢你的建议@Nisarg Shah。我按照你的建议做了,结果是积极的。干杯……当然可以。我有一个查询,我想创建单文本字段和双文本在单行根据要求。那么我应该使用哪种方法来创建它呢。我应该为两者创建两个xib,然后根据单/双文本字段绘制吗?@ChetanLodhi如果你对自动布局有足够的了解,那么你应该选择单xib。如果您不需要为设计更改带来更多麻烦,您应该使用不同的xib。