如何在iOS中创建动态表单?

时间:2019-05-17 09:58:20

标签: ios swift

我必须创建一个动态表单,其中包含问题答案集,并且每个用户的问题都不同。该用户中有5个问题必须回答至少3个问题。在5个问题的集合中,第一个用户可以以与第二个用户可能需要3个文本字段1下拉菜单和1个单选按钮相同的方式来获取需要1个文本字段2下拉菜单和2个单选按钮的问题。我应该采取什么方法来实现这一目标?

我试图创建一个表视图。在单元格中,我指定了一个标签来呈现一个问题,并指定了一个空白视图,稍后将根据该问题需要文本字段或单选按钮或下拉菜单来填充该空白视图。但是在这种情况下,我无法保持回答的问题,因为如果我使文本字段或复选框的用户交互无法进行,则即使尝试使用委托进行映射也不会调用didselectrowatindexpath方法,但是该方法也不适合我,因为我有很多案例要作为答案字段进行管理。

2 个答案:

答案 0 :(得分:0)

好吧,您的主要任务是创建一个动态表单,其中根据所需的问题而具有不同的对象。因此,请先执行以下操作:

  1. 创建单个tableCell,例如包含问题标签和答案或复选框的文本字段。标签对于每个tableCell都是通用的。
  2. 将所需的委托或IBOutlet与对象连接

  3. 在表单元格中创建闭包,并在用户回答完问题后处理数据。

  4. 最后将闭包回调收集的数据保存在 TableViewcellforRowAtIndexpath 中,并根据需要使用它们。

答案 1 :(得分:0)

可能有不同的实现。我要做的是:-

  • 根据用户界面区分问题类型(根据您的情况)
  • 在QuestionModel类中添加 questionType枚举
  • 将为每种问题类型创建一个不同的单元格
  • 针对每个问题类型使用该特定单元格
  • 甚至将来会出现任何新的问题类型,在枚举中再添加一个案例并创建一个单元格

我的实现将对QuestionModel类执行以下操作:-

Class Question {
 enum Type {
  case type1, type2 .....
  func cellIdentifier() -> String {
   switch self {
    case type1:
         return "type1"
    //Handle all cases

   }
  }
 }

 var type: Type

}

Controller类将是这样的:-

Class Controller: UIViewController {
 var questions = [Question]()

//Table view delegate method

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let questionAtIndexPath = questions[indexPath.row]
  let cell = tableView.dequeReusableCell(withIdentifier: questionAtIndexPath.type.cellIdentifier(), for: indexPath)
  cell.configureWith(questionAtIndexPath)
  return cell
 }

}