2017-08-28 129 views
0

另一個ViewController中有一個按鈕,如果按下它,我應該看到按下按鈕時的時間。剛剛重新啓動應用程序後,UITableView單元更新

該按鈕可以工作,但在單擊刷新按鈕後表格不會刷新,將刷新放在ViewDidAppear函數上也不起作用。

我需要退出應用程序,關閉它從多任務並再次打開它,然後按下按鈕的時間顯示。我應該怎麼做才能使刷新按鈕有效?

(兩個視圖控制器以相同的故事板,第二個延伸第一個)

首先視圖控制器:

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") 
} 
    . 
    . 
    . 
} 
+0

「在另一個ViewController中有一個按鈕」從您的代碼中,按鈕似乎位於Button的同一個ViewController上。你如何精確管理? – Larme

+0

@Larme我已經更新了這個問題。 – matanm

+0

@matanm如何從第一視圖控制器中的'Userdefaults'獲取活動? –

回答

0

需要從用戶默認值中獲取您在活動數組中的新日期,之後您可以重新加載數據

@IBAction func Reload(_ sender: AnyObject) { 
    self.activities = UserDefaults.standard.get(forKey: "activities") 
    activity.reloadData() 
} 
0

當你調用activity.reloadData(),你告訴表視圖,以更新其行,他們顯示僅基於你行定義的你activities屬性的內容:

var activities = [String]() 

當你'重新從一個新的開始加載應用程序,activities字符串數組尚未填充任何東西。我看到你將數據保存到UserDefaults,但我沒有看到你閱讀它的任何地方。

將下一個代碼放入您的viewDidLoad()viewDidAppear()不是你想用於這個目的。

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

我設法得到這個automaticlly沒有刷新按鈕。當我把它放在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() 
} 
相關問題