2017-08-25 53 views
-2

我有這個問題,在gif附件中你可以看到它:如果我點擊UrgenzaViewController的行它返回到ho fumatoViewController,我需要的是標籤在UITableViewCell中,「Urgenza」將使用UrgenzaViewController中按下的行的標題進行修改。如何修改自定義單元格中的標籤?謝謝大家從viewcontroller反向傳遞數據到uitableviewcell

enter image description here

+0

這可以通過代表團輕鬆完成 – OverD

+0

可以請給我一個代碼示例嗎? –

+1

你應該使用委託,我會嘗試給你發送一個例子 –

回答

2

在你Urgenza視圖控制器創建你的文件的頂部的委託(上面類聲明,下面的import語句)是這樣的:

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

然後你Urgenza內類聲明創建委託的實例是這樣的:

weak var delegate: UrgenzaDelegate? 

然後didSelectRowAtIndexPath方法裏面方法具d我會這樣調用委託方法:

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

用您用來填充單元標籤的任何數據源替換'dataSource'。

最後,在您的初始視圖控制器(Ho fumatoViewController)中,您需要符合您剛剛創建的代理。您可以通過這樣的擴展做到這一點:

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

最後,也是非常重要的!無論你正在推動Urgenza視圖控制器,你必須將自己的財產委託,像這樣:

let vc = UrgenzaViewController() 
    vc.delegate = self // This is the important part! 
    self.present(vc, animated: true, completion: nil) 
+0

類類型的協議應該有弱代表。否則,您創建了一個零售週期(內存泄漏),並且您的代理似乎爲零。 –

+0

You are right。更新代碼以創建弱參考 – LoganHenderson

+0

現在看起來不錯。 –

相關問題