2016-10-14 48 views
0

我有一個名爲TableVC的UITableViewController和一個名爲CustomCell的自定義UITableViewCell。裏面的CustomCell類,我有一個UIButton:Swift:從UIButton更新UITableView在自定義UITableViewCell裏面

@IBAction func reloadTableView(sender: AnyObject) { 

    TableVC().tableView.reloadData() 

} 

當相應的按鈕被點擊,它似乎並沒有更新/重裝我的表視圖。爲什麼不,我能做些什麼來解決我的問題?

謝謝!

回答

0

你可以得到一個細胞的tableView在幾個方面。你的單元格的超視圖應該是UITableView,所以在你的單元格中你可以使用(superview as? UITableView)?.reloadData()

但是更穩定的方法是使用響應者的層次結構。我創建了一個非常有用的擴展,使您能夠找到特定類型的下一個響應者,例如UITableView

extension UIResponder { 

    func nextResponder<T: UIResponder>(ofType type: T.Type) -> T? { 

     switch nextResponder() { 

     case let responder as T: 
      return responder 

     case let .Some(responder): 
      return responder.nextResponder(ofType: type) 

     default: 
      return nil 
     } 
    } 
} 

這是一個遞歸函數,所以它爬上響應層次結構,直到它成功蒙上了應答器所提供的類型或用完反應,試圖投的。

@IBAction func reloadTableView(sender: AnyObject) { 

    nextResponder(ofType: UITableView.self)?.reloadData() 
} 
+0

這個伎倆。謝謝! – madrhatter

0

每當你點擊一個按鈕,你正在創建一個新的TableVC實例,並且你正在重新加載那個tableview數據。而不是在某處存儲TableVC對象並在其上重新加載數據。要麼創建一個TableVC的IBOutlet,要麼在類中創建一個屬性,然後爲其分配TableVC引用。

+0

@madrhatter這是幫助你嗎? – Sahil

0

只使用

self.tableView.reloadData() 
相關問題