UITableView单元格在重新启动应用程序后立即更新

时间:2017-08-28 07:37:21

标签: ios swift

另一个ViewController中有一个按钮,如果我按下它,我应该看到按下按钮的时间。

按钮有效,但点击刷新按钮后表格不会刷新,将刷新放在ViewDidAppear功能上也不行。

我需要退出应用程序,将其从多任务处理中关闭并再次打开,然后按下按钮显示的时间。如何使刷新按钮工作?

(两个视图控制器都在同一个故事板中,第二个扩展第一个)

First View Controller:

class Tracking: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var activity: UITableView!
var activities = [String]()
var userData = false

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return activities.count
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
    cell.textLabel?.text = activities[indexPath.row]
    return(cell)
}

@IBAction func Reload(_ sender: AnyObject) {
    activity.reloadData()
}
.
.
.
}

第二个视图控制器:

class Activity: Tracking {
    .
    .
    .
@IBAction func playButton(_ sender: AnyObject) {
    isPlayed += 1
    userData = true
    UserDefaults.standard.set(userData, forKey: "userData")
    let playElm = playStr + " בשעה: " + getTime()
    activities.append(playElm)
    UserDefaults.standard.set(activities, forKey: "activities")
}
    .
    .
    .
}

3 个答案:

答案 0 :(得分:0)

您需要从用户默认值中获取活动数组中的新日期,之后您可以重新加载数据

Delegate

答案 1 :(得分:0)

当您致电activity.reloadData()时,您告诉表格视图仅根据您使用该行定义的activities属性的内容来更新其行及其显示内容:

var activities = [String]()

当您从一个全新的开始加载应用程序时,activities字符串数组尚未填充任何内容。我看到你将数据保存到UserDefaults,但我没有看到你从哪里读到它。

将下一个代码放入viewDidLoad()viewDidAppear()不是您想要用于此目的的。

activities = UserDefaults.standard.get(forKey: "activities")
activity.reloadData()

答案 2 :(得分:0)

我设法在没有刷新按钮的情况下自动运行。当我将它放在viewDidAppear中时,Svetoslav Bramchev编写的代码可以正常工作。谢谢你的帮助!

override func viewDidLoad() {
    super.viewDidLoad()
    userData = UserDefaults.standard.bool(forKey: "userData")
    if(userData == true){
        activities = UserDefaults.standard.object(forKey: "activities") as! [String]
    } else {
        activities.append("no data")
        UserDefaults.standard.set(activities, forKey: "activities")
        if(activities[0] == "no data"){
            activities.remove(at: 0)
            UserDefaults.standard.set(activities, forKey: "activities")
        }
    }
}

override func viewDidAppear(_ animated: Bool) {
    activities = UserDefaults.standard.object(forKey: "activities") as! [String]
    activity.reloadData()
}