Swift渲染具有动态内容

时间:2017-01-31 22:31:44

标签: ios swift xcode uitableview

我的静态 UITableView包含 n 列和1个部分。详细信息包含从另一个UIViewController传递的一些动态内容。
我的解决方案如下:我在viewDidAppear中打电话来呈现动态内容并最终重新加载视图:

override func viewDidAppear(_ animated: Bool) {
        setupDetails()
    }

fileprivate func setupDetails() {
        tableView.cellForRow(at: [0,0] as IndexPath)?.detailTextLabel?.text = "..."
        tableView.cellForRow(at: [0,1] as IndexPath)?.detailTextLabel?.text = "..."
        // .... multiple cells

        tableView.reloadData()
    }

我不喜欢的是在向用户显示视图后更新内容(感谢viewDidAppear调用)。
对于处理cellForRow()方法的问题,鉴于在我的Storyboard中静态创建了单元格,我无法使用它。
我的问题是,在这个具体案例中是否存在一种我没有想到的模式。我基本上希望在显示视图之前加载视图,就好像我正在使用动态单元格一样。

2 个答案:

答案 0 :(得分:1)

  

我的问题是,是否存在要在此特定情况下使用的模式

是。不要使用静态表。你的桌子不是是静态的! “静态”意味着“永不改变”。你的桌子与静电相反;它 更改。这是动态的!

所以,使用普通的动态表。维护三大问题(数据源方法)咨询的数据模型。要使用新数据更新表,请先更新数据模型,然后调用reloadData。这将导致cellForRowAt 被称为,并且您将从数据模型中填充每个单元格。这比你正在做的更有效

至于闪光灯,这只是时间问题;使用viewWillAppear代替viewDidAppear

答案 1 :(得分:1)

如果您不希望更改为向用户显示,请不要使用ViewDidAppear。使用ViewWillAppear,当用户第一次看到视图时,视图已经处于最终状态。