【问题标题】:I want to generate tableview form with JSON data [closed]我想用 JSON 数据生成 tableview 表单[关闭]
【发布时间】:2018-06-28 11:41:11
【问题描述】:

我的本​​地文件中有一个 JSON 数据,我想在我的表单中复制它。

JSON 数据告诉我们信息,例如,哪个字段是必需的,哪个是下拉列表、占位符和更多信息。

我几乎实现了我的目标,但唯一的问题是键盘在我切换文本字段时会双击显示。

我被这个问题困住了。谁能帮帮我?

小代码的问题我无法解释,所以添加完整的源代码,请见谅。

我在这里添加我的源代码链接,

https://drive.google.com/file/d/12vhrz6CgDSuma6ViYOsGkCIb9SE6fSbR/view

【问题讨论】:

  • 请不要分享整个代码...只显示您遇到问题的代码...例如如果键盘出现问题然后显示您编写的 TextField Delegate 方法...
  • 点击文本框tableview重新加载然后重置所有这些..
  • @LeNI 这就是问题所在。如何让它活跃起来?
  • 你能详细解释一下这个问题吗?
  • 您的问题无法在您的问题中准确表达,这是获得一些反对票的主要原因

标签: ios iphone swift xcode ipad


【解决方案1】:

尝试使用:

func updateModel(text: String, indexPath: IndexPath) {

    var item        = self.viewModel.get(at: indexPath)
    item.value      = text
    item.indexPath  = indexPath
    self.viewModel.formModel[indexPath.section].items![indexPath.row] = item
    self.tableForm?.reloadRows(at: [indexPath], with: .automatic)
}

另外,避免使用弱自身的保留循环:

    self.viewModel.fetchFormData(fileName: "fields") { [weak self] (data, error) in

        if (error?.isEmpty)! {
            self?.tableForm?.reloadData()
        }
    }

否则 ViewController 和 ViewModelForm 将永远保存在内存中

【讨论】:

  • 它不能解决问题
  • 嗯,我确实试过了。它避免了 reloadData,因此选择文本字段保持在屏幕上……
  • 它重新加载第一次输入的文本字段
  • 它会重新加载前一个文本字段,而不是当前文本字段。这个方法在textFieldDidEndEditing中调用
  • 我们也应该解决这个问题
【解决方案2】:

在updateModel函数中你需要替换

self.tableView.reloadData() 

self.tableForm?.reloadRows(at: [indexPath], with: .automatic)

因此,基本规则是,如果您只想在表格视图中重新加载单行,请使用 reloadRows 而不是重新加载完整的表格视图。

【讨论】:

  • 这也保留在上一个答案中,并且工作正常
  • 如果我这样做不起作用。我已经试过了。如果我在部分之间交换它会给出错误的输出。您可以看到在部分之间填充和跳过文本字段,输出是意外的。
  • 你没有维护 UI 状态
猜你喜欢
  • 1970-01-01
  • 2013-02-11
  • 2011-03-01
  • 2011-11-12
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
相关资源
最近更新 更多