Swift: Как создать макет Dynami c из json response iOS - PullRequest
1 голос
/ 11 марта 2020

Я хочу создать динамический макет c в соответствии с json ответом, полученным с сервера. Я запутался между методологией, использующей представления с ограничениями или использование таблицы для достижения этого макета. Я исследовал другой подход, который заключается в том, что различные виды представлений xib после анализа ответа проверяют каждый тип элемента и вызывают соответствующее представление в ячейке табличного представления. Я просто хочу предложить, как я могу создать этот макет лучше.

Ответ json:

 "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”
      }
    ]
  } 

1 Ответ

4 голосов
/ 11 марта 2020

Лучший подход для достижения динамического макета c - это использование стека. Используя xib, вы можете запустить представление и добавить его в виде упорядоченного подпредставления внутри стека.

Сначала необходимо создать функцию расширения, чтобы вы могли использовать ее повторно.

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)
...