LoginSignup
2
3

More than 5 years have passed since last update.

Swift TableViewからの画面遷移後戻った時の元画面のTableViewリフレッシュ

Last updated at Posted at 2016-03-29

ViewController.swiftのTableViewのCellを選択し遷移し遷移したDetailViewController及びAddDetailViewControllerより戻った際にCallbackによりTableViewをUpdateする処理にハマってしまったのでその結果を投稿します。(Swif初心者です!!)

遷移元からは

遷移元処理
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!

    var selectedItem: String?
    var selectedUrl: String?
    var links:[Links] = [Links]()
    override func viewDidLoad() {
        super.viewDidLoad()

        //テーブルセットアップ
        tableView.delegate = self
        tableView.dataSource = self

        //データベース処理等
        sql()

    }

    func updateTableView() {

        //データベース処理再実行配列初期化等
        links.removeAll()
        sql()
        // 再描画
        self.tableView.reloadData()

    }

    func sql(){
        //tableView配列データ全削除
        links2.removeAll()
    省略・・・・・・・・

    }

    func tableView(tableViewx: UITableView, numberOfRowsInSection section: Int) -> Int {
        return links.count // link数に変更
    }

    func tableView(tableViewx: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // IdentifierがLinkViewCellのセルを使いまわす
        let cell: CustomCell = tableView.dequeueReusableCellWithIdentifier("CustomCell")! as! CustomCell
        // cellの内容を設定
        cell.setCell(links[indexPath.row])
        return cell
    }

    // Cell が選択された場合
    func tableView(table: UITableView, didSelectRowAtIndexPath indexPath:NSIndexPath) {
        //TableViewCell選択にてlinks配列よりsendデータ取得
        selectedItem = String(links[indexPath.row].picid)
        selectedText=String(links[indexPath.row].picUrl)
        if selectedItem != nil {

            // SubViewController へ遷移するために Segue を呼び出す
            performSegueWithIdentifier("showDetailView",sender: nil)

        }


    }

    // Segue 準備(複数のsegueをif文で分岐)
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if (segue.identifier == "showDetailView") {

            let subVC: DetailViewController = (segue.destinationViewController as? DetailViewController)!
            // SubViewController のselectedImgに選択された画像を設定する
            subVC.sendtext = selectedText
            subVC.sendpicid = selectedItem
            //ここでCallbackの為のupdateTableViewを設定
            subVC.callBackAction = {self.updateTableView()}
        }
        else if(segue.identifier == "AddDetailView"){
            let addDetailViewController = (segue.destinationViewController as? AddDetailViewController)!
            addDetailViewController.callBackAction = { self.updateTableView() }

        }
    }

//ボタンにて遷移する場合
@IBAction func goDetailButton(sender: AnyObject) {

    let detailViewController = self.storyboard?.instantiateViewControllerWithIdentifier("showDetailView") as! DetailViewController
    detailViewController.callBackAction = { self.updateTableView() }    

self.presentViewController(detailViewController, animated: true, completion: nil)

}

    //省略・・・・・・・・・
}



//遷移先処理データ編集処理(データベースの更新あり) 
class DetailViewController: UIViewController {

    var callBackAction: (() -> Void)?

      //戻るボタンのAction設定
        @IBAction func retTopButton(sender: AnyObject) {

        self.dismissViewControllerAnimated(true, completion: {
            self.callBackAction?()
        })

    }
}

//遷移先データ追加処理(データベースの追加登録あり)
class AddnoteViewController: UIViewController {

    var postDismissionAction: (() -> Void)?

    @IBAction func retTopButton(sender: AnyObject) {

        self.dismissViewControllerAnimated(true, completion: {
            self.callBckAction?()
        })
    }
    //省略・・・・・・・・・
}
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3