2017-08-25 13 views
-2

私はこの問題を抱えています。添付されたGIFで、私はUrgenzaViewControllerの行をタップするとHo fumatoViewControllerに戻ります。必要なのはLabel UITableViewCellで "Urgenza"はUrgenzaViewControllerで押された行のタイトルで変更されます。カスタムセルのラベルを変更するには?このようなおかげでみんなViewControllerからuitableviewcellへのデータの受け渡し

enter image description here

あなたUrgenzaビューコントローラで
+0

これは委任によって容易に達成されます – OverD

+0

OverDコードの例を教えてください。 –

+1

あなたは代理人を使用すべきです、私はあなたに例を送ろうとします –

答えて

2

(import文の下に、あなたのクラス宣言の上に)あなたのファイルの先頭にデリゲートを作成します。あなたのUrgenza内部次に

protocol UrgenzaDelegate: class { 
    func menuItemSelected(item: String) 
} 

クラス宣言は、次のようにデリゲートのインスタンスを作成します。

weak var delegate: UrgenzaDelegate? 

次に内部ではSelectRowAtIndexPath methoあなたは、セルのラベルを移入するために使用しているどんなデータソースとの「データソース」を交換してください

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if let delegate = delegate { 
     delegate.menuItemSelected(item: dataSource[indexPath.row]) 
    } 
} 

:D私はこのようなデリゲートメソッドを呼び出します。

最後に、初期ビューコントローラ(Ho fumatoViewController)で、作成したデリゲートに準拠する必要があります。

let vc = UrgenzaViewController() 
    vc.delegate = self // This is the important part! 
    self.present(vc, animated: true, completion: nil) 
:あなたはUrgenzaビューコントローラをプッシュしているところはどこでもあなたがそうのようにそのデリゲートプロパティに自分自身を設定する必要があります!

extension fumatoViewController: UrgenzaDelegate { 
    func menuItemSelected(item: String) { 
     // Here is where you save the selected item to whatever data source you are using 
     tableView.reloadData() 
    } 
} 

そして最後に、非常に重要:あなたはこのように拡張することによって、これを行うことができます

+0

プロトコルには弱い代理人が必要です。それ以外の場合は、小売サイクル(メモリリーク)を作成しました。あなたの代理人がゼロであるようです。 –

+0

あなたは正しいです。弱い参照 – LoganHenderson

+0

を作成するようにコードを更新しました。 –

関連する問題