更新数据时更新子视图

时间:2016-05-12 13:39:06

标签: ios uiview

我根据数组中的内容在屏幕上添加一组标签。现在,如果我修改数组,更新标签的最佳方法是什么?

在所有当前标签上调用removeFromSuperView,然后根据更新的数组再次添加标签?

我不想重绘整个视图,因为这会重新加载WKWebView中的网页。

override func viewDidLoad() {

    super.viewDidLoad()

    // initialise a WKWebView and some others here

    var label: UILabel
    for i in 0..<myArray.count {
        label = UILabel(frame: ...)
        scrollView.addSubview(label)
    }

}

2 个答案:

答案 0 :(得分:1)

您可以在视图控制器中保留数组中标签的引用,并在修改数据数组后,根据需要更新标签:

var labels : [UILabel] = []

override func viewDidLoad() {

  super.viewDidLoad()

  // initialise a WKWebView and some others here

  var label: UILabel!
  for i in 0..<myArray.count {
    label = UILabel(frame: ...)
    scrollView.addSubview(label)
    //Add your labels to the array here.
    labels.append(label)
  }
}

然后,一旦您需要根据数组更新标签,您只需使用标签数组:

func updateMyLabels() {

  var label: UILabel!
  for i in 0..<myArray.count {
    label = labels[i]
    //Then you update your label as needed here
    label.frame = ...
    label.text = ...

    //If you need the Label UI to update you can call layout if needed
    label.layoutIfNeeded()
  }
}

答案 1 :(得分:0)

为每个标签指定唯一标记的最佳方法,以及修改数组时仅更新受影响的标签。你可以在循环内完成。

为此,在创建标签时,您可以根据数组索引给出标签。当你的数组被修改时,你应该有一些标志来修改这个特定的数据,你应该遍历它并且只更新那个标签。您可以通过使用数组中该项的索引来获取特定标签。