2016-05-10 11 views
4

私は2つのSwiftファイルを持っています:NotificationsViewControllerとViewController。 ボタンをタップすると、firstArrayがViewContollerで更新されます。私は更新されたデータを印刷することができました。しかし、私がNotificationsViewControllerに戻ると、更新するためにプルするときにtableviewは更新されません。テーブルビュー(Swift)でデータを更新する方法

NotificationsViewController:

import Foundation 
import UIKit 

var firstArray : [String] = ["123","1234"] 

class NotificationsViewController: UITableViewController { 


    var refresher: UIRefreshControl! 

    var data: [[String]] = [firstArray, ["4","5"]] 

    func refresh(){ 

     print("refreshed") 
     self.tableView.reloadData() 
     self.refresher.endRefreshing() 

    } 

    override func viewDidLoad() { 


     refresher = UIRefreshControl() 
     refresher.attributedTitle = NSAttributedString(string: "pull to refresh") 

     refresher.addTarget(self, action: #selector(NotificationsViewController.refresh), forControlEvents: UIControlEvents.ValueChanged) 
     self.tableView.addSubview(refresher) 
     refresh() 


     super.viewDidLoad() 
     self.tableView.editing = true 

    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return data.count 

    } 
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 



     return data[section].count 

    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell: UITableViewCell = UITableViewCell(style: .Subtitle, reuseIdentifier: "tableCell") 

     cell.textLabel?.text = data[indexPath.section][indexPath.row] 

     return cell 
    } 

    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
     if editingStyle == .Delete { 

      data[indexPath.section].removeAtIndex(indexPath.row) 
      tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 



     } 
    } 

} 

のViewController:

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func button(sender: AnyObject) { 
       firstArray.append("522") 
       print(firstArray) 

    } 


} 

私はthisを試みたが、それはあまりにも動作しませんでした。

更新日:

にはどうすればcell.detailTextLabelの値を更新することができます別の配列に基づいているの.text?あなたが最初の配列を更新した後

は、事前に

+0

ような配列をretrive ??? – ArgaPK

答えて

14

一つの問題をいただき、ありがとうございます。あなたもデータを更新する必要があります。それは自動的に更新されません。ので、あなたのコードは

func refresh(){ 
    data = [firstArray, ["4","5"]] 
    print("refreshed") 
    self.tableView.reloadData() 
    self.refresher.endRefreshing() 
} 

フィードバックのようになります。

をする代わりに、クラスの外で変数を使用するのでは、その優れたシングルトンクラスを使用します。それは次のようになります。

class Singleton: NSObject { 
    static let sharedInstance = Singleton() 
    var firstArray = [] 
} 

あなたが更新することができます/既存のアイテムを編集/更新するための編集スタイルがどうなるか

Singleton.sharedInstance.firstArray 
+0

ありがとうございました – Jana

+0

@Subash既存のアイテムを更新/編集するための編集スタイルは何ですか? – ArgaPK

関連する問題