2016-11-19 62 views
0

我正在編輯第二個viewController上的電子郵件。如果我修改第二個視圖(tableViewBudget)中的電子郵件地址,但表格視圖Cell不更改,Label.text(在ViewController中)確實會更改。它始終顯示savedEmail.text的第一個值。我如何修改我的代碼,以便tableView單元格在我更改另一個表格視圖中的字符串時發生變化?謝謝!ios Reloading TableView

import UIKit 

class ViewController:UIViewController,UITableViewDataSource,UITableViewDelegate { 

    @IBOutlet weak var savedEmail: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func exitToHere (sender: UIStoryboardSegue){ 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! 
     cell.textLabel?.text = savedEmail.text 
     return cell 
    } 
} 

第二個視圖控制器

import UIKit 

class TableviewBudget: UIViewController { 

    @IBOutlet weak var emailField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 
    @IBAction func updateEmail(_ sender: Any) { 
     (presentingViewController as! ViewController).savedEmail.text = 
      self.emailField.text 
    } 

    @IBAction func hideKeyboard(_ sender: Any) { 
     self.emailField.resignFirstResponder() 
    } 
    override func viewWillAppear(_ animated: Bool) { 
     self.emailField.text = (presentingViewController as! ViewController).savedEmail.text 

     super.viewWillAppear(animated) 
    } 

} 
+0

嘗試在updateEmail方法內的表上調用reloadData()? – nodyor90z

回答

1

您可以儘快使用委託回調發送到第一UIViewController,你的情況類ViewController用戶完成編輯文本。

在你的類TableViewBudget改變它喜歡這樣,這將創建一個代表將數據傳遞到以前的視圖控制器

對於斯威夫特3

protocol delegateVC{ 

    func updateEmail(email : String) 
} 

class TableviewBudget: UIViewController{ 
    //add this inside this class 
    var delegate : delegateVC? 
    ... 
} 

現在改變你的函數

@IBAction func updateEmail(_ sender: Any) { 
    self.delegate?.updateEmail(email: self.emailField.text) 
} 

現在在你的班級ViewController add-

class ViewController:UIViewController,UITableViewDataSource,UITableViewDelegate, delegateVC{ 

    func updateEmail(email : String){ 
     //update label here inside your first VC by getting the cell, using the indexPath of the cell that contains the E-mail 
     //also update your modal here to contain the next email otherwise if cellForRow gets called again, the e-mail field will get reset 
     cell.textLabel?.text = email 
    } 
} 

還記得設置這個代表你prepareForSegue,而你從ViewController,東西推TableViewBudget

let tableViewBudget = TableViewBudget() 
tableViewBudget.delegate = self 
0
在視圖控制器

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    tableView.reload() 
} 
0

嘗試調用

tableView.reloadData() 

tableView.beginUpdates() 
tableView.reloadRows(at: [yourIndexPath], with: .fade) 
tableView.endUpdates() 

第二個版本更好,當你有很多行,但你想重新加載只有一個或幾個