web-dev-qa-db-ja.com

テーブルビューでデータを更新する方法(Swift)

2つのSwiftファイル:NotificationsViewControllerおよびViewController。ボタンがタップされると、ViewContollerでfirstArrayが更新されます。更新されたデータを印刷できました。ただし、NotificationsViewControllerに戻るとリフレッシュするためにプルしても、tableviewは更新されません。

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の値を更新するにはどうすればよいですか?

前もって感謝します

13
Jana

1つの問題:

最初のアレイを更新した後。データも更新する必要があります。自動的には更新されません。あなたのコードは次のようになります

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
24
Subash