Так что, безусловно, можно динамически и программно создать форму, в которой есть строки и разделы, управляемые файлом конфигурации.Я делаю это сам в приложении, которое создал.
Однако вам придется создать свой собственный формат метаданных json и использовать оператор switch для динамического добавления определенных типов строк и их правильной настройки.В Eureka нет механизма, который «сериализует» метаданные конфигурации формы для хранения, скажем, в json, а затем десериализует их из этих метаданных json.Но вы можете сделать то же, что и я, и создать свой собственный десериализатор, зацикливая некоторые метаданные json, создавая строки и разделы, и настраивая их необходимые параметры.
Чтобы адаптировать собственный пример кода:
let section = Section()
form +++ section
for node in nodes {
switch node.type {
case 'TextRow':
section <<< makeTextRow(node: node)
case 'PasswordRow':
section <<< makePasswordRow(node: node)
:
:
default:
}
:
:
func makeTextRow(node:Node) -> TextRow {
return TextRow() {
$0.tag = node.tag
$0.title = node.title
$0.placeholder = node.placeholder
:
:
}
}
Конечно, вы можете просто сделать функцию makeRow (node: Node) и переместить оператор switch в эту одну ведущую функцию, тогда в цикле будет только section <<< makeRow(node: node)
.Существует множество возможных шаблонов проектирования, которые вы можете использовать.
Также обратите внимание, что вы можете использовать .cellUpdate { cell, row in
для дальнейшей динамической настройки динамической строки на основе дополнительных метаданных в вашем классе Node.Например, в моем приложении я определил динамический тип строки «Шестнадцатеричный»;Эврика в настоящее время не имеет HexadecimalRow;но у меня есть различные пользовательские клавиатуры, одна из которых - шестнадцатеричная клавиатура, которую я только что назначил TextRow.
Или вы можете снова назначить другие правила на основе метаданных в вашем классе Node.На самом деле вы можете создавать все виды динамических полей, которые в настоящее время не существуют как определенные типы строк в Eureka.
Я также использовал программные циклы для создания серии, скажем, TextAreaRow, которая позволяет конечному пользователю вводить имяих организации на разных языках.Количество и порядок этих языков заранее неизвестны, поэтому используется цикл, а не «водопад» с фиксированным количеством TextAreaRows.
Так что, конечно, хотя во всех примерах Eureka показан простой «водопад»Определения форм, использование циклов для создания динамических строк и разделов форм на основе содержимого базы данных или json очень полезно.