2016-10-16 15 views
0

は私がアプリを開発していると私はそれがiOSの設定ページのように見えるようにしたい:UITableViewCellを詳細ビューの情報で更新するには?

enter image description here

私が複製する行動が細胞に見られるものである「から/へ」と"呼び出しを許可する"。気付くと、それらのセルにはユーザーが挿入したデータが表示されます。どのように私はそれを複製できますか?

まず、私はiOSにはかなり新しいので、私が思いついたものは私の場合には最適な解決策ではないかもしれません。

これは私が(右にラベルを追加し、その値を設定する)ことについてどう思うかである:

enter image description here

があることが最善のアプローチですか?また、どのようにその値を設定するのですか?ユーザーがそのセルを更新するために詳細ビューから戻った後、どうすればいいですか?

+0

iOSで 'UITableViewCells'とデータの永続性を再利用して、' UITablevIews'についてどれくらい知っていますか? – Adeel

+0

@Adeelよく私は細胞を再利用することについて知っています(私はその技術を利用しています)。データの永続性については、SQLiteを使用しています。しかし、この場合、私はビュー間のデータの永続化について心配しています。私は知識がないので、2番目の質問「ユーザーが詳細ビューから戻ってそのセルを更新したらどうすればいいですか? – eestein

+0

詳細ビューから戻るときにセルを更新するには、2通りの方法があります。 1)「プロトコル」2)「通知」。私はあなたが最初の選択肢に行くことをお勧めします。あなたはどの言語を使っていますか? – Adeel

答えて

1

詳細ビューで値が変更された場合、基本的に以前のビュー(FirstViewController)のコンテンツを更新したいとします。これを行うための1つの方法は、Protocols and Delegatesです。すでにstoryboardsseguesについて知っているとします。この例では、DetailViewControllerのボタンを押すとFirstViewControllerUILabelのテキストが変更されます。

続きはDetailViewControllerで始まります。このシーンの変更を観察し、それに応じて他のシーンのデータを更新したいとします。したがって、このクラスにprotocolを定義する必要があります。

protocol DetailDelegate { 
    func updateCellWith(_ data:String) 
} 

このクラスの完全な定義は次のようになります。

import UIKit 

protocol DetailDelegate { 
    func updateCellWith(_ data:String) 
} 

class DetailViewController: UIViewController { 

var delegate: DetailDelegate? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
} 

//On button tap the cell content will change in the previous scene through the delegate method 
@IBAction func didTapBtn(_ sender: AnyObject) { 
    delegate?.updateCellWith("Cell updated") 
} 
} 

FirstViewControllerDetailViewControllerdelegateなり、DetailDelegateに準拠します。移行前にをDetailViewControllerの代理人に設定します。オンボタン

class FirstViewController: UIViewController, DetailDelegate { 

@IBOutlet weak var tableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

// Mark Navigation 

@IBAction func moveToDetailVC(_ sender: AnyObject) { 
    performSegue(withIdentifier: "detail", sender: indexPath) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let vc = segue.destination as! DetailViewController 
    vc.delegate = self 
} 
} 

DetailViewControllerは、デリゲートメソッドupdateCellWith:を通じてFirstViewControllerに文字列Cell updatedを渡しますタップします。

+0

ありがとうございます! :) – eestein

+0

私の喜び。 – Adeel

関連する問題