2017-03-17 79 views
1

我已經構建了一個應用程序,圍繞着我已經建立的漂亮的tableview。Swift 3 - 從不同的視圖控制器過濾器tableview

我已經設置了輔助視圖控制器作爲模式顯示的菜單,並且我想通過選擇輔助視圖控制器上的其中一個按鈕來過濾tableview。

例如,每個單元格都有一個城市分配給它。在菜單中,我希望能夠點擊一個城市並過濾tableview,以僅顯示該城市的單元格。

我有太多的代碼粘貼,我相信我可以通過一些方向來解決這個問題。

感謝您的幫助!

+0

你的問題在哪裏?你有嘗試過什麼嗎? –

+0

@Lu_我已經嘗試過自定義賽格等。我不能讓桌面視圖過濾或採取任何行動從第二個視圖控制器上的按鈕點擊。 – scttcrry

+0

不要顯示您的所有代碼,但請添加_relevant_代碼。告訴我們你試過了什麼,什麼沒有工作 –

回答

0

你可以從你的第二個視圖控制器的按鈕返回到您的表視圖控制器開卷SEGUE做到這一點。

在你的表視圖控制器,也就是說,

func unwindToTableView(_ segue: UIStoryboardSegue) { 

    switch segue.identifier { 
     case "FilterNames": 
      filterByName() 
     etc… 
    }  
} 

,或者你可以爲每個過濾器不同的開卷funcs中......

func unwindAndFilterName(_ segue: UIStoryboardSegue) { 
    filterByName() 
} 

etc 

掛鉤開卷SEGUE,只需添加方法你桌面視圖控制器,然後在您的故事板中,從第二個視圖控制器上的按鈕拖動到它的退出圖標。 segue func應該出現在列表中

+1

我很確定這就是我正在尋找的!我會試一試! – scttcrry

+0

這就是我最終使用的!非常感謝! – scttcrry

0

要做到這一點,你希望在應用程序中有單獨的DataSource層來清除代碼。我會爲你寫一個很小的例子,讓你可以實現它。

例如,您有類DataSource。隨着你顯示的信息。在我的情況下,它是cities。現在,當我想要進行分類時,我將撥打sortAlphabetically()並重新加載tableview。這很簡單,你的解決方案真的取決於你如何與UITableView合作。

class DataSource { 

    var cities = ["Lviv", "Lutsk", "Kiev", "Rivne"] 

    func sortAlphabetically() { 
     cities = cities.sorted { $0 < $1 } 
     //reload tableview hear 
    } 

} 
+0

謝謝!我會試試這個。這會在tableviewcell.swift中進行嗎? – scttcrry

+0

@scttcrry將代表設置爲tableview時。做這個self.tableview.datasource =數據源 –

+0

謝謝!我會給這個鏡頭。 – scttcrry

0

最好的方法是使用委託,在過濾視圖控制器中添加一個協議,並在tableView中爲tableView過濾數據源中的委託函數。不要忘記在您繼續使用過濾器視圖控制器之前將表視圖控制器分配給過濾器視圖控制器

最好的方法是使用委託,在過濾視圖控制器中添加一個協議並在tableView中添加一個委託函數,數據源爲tableView。不要忘了你的表視圖控制器指定作爲委託你Segue公司之前,過濾器視圖 - 控制

您filterViewController

protocol FilterViewControllerDelegate { 
    func tableViewCriteria(criteria: AnyObject) 
} 

在你filterViewController之前:

var delegate: FilterViewControllerDelegate? 

在類的聲明tableViewController,添加FilterViewControllerDelegate

class MyTableViewController: UITableViewController, FilterViewControllerDelegate{ 

不要忘記設置FilterViewControllerDelegate自我您Segue公司的filterView前:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "showFilter" { 
      if let fvc = segue.destination as? FilterViewController{ 
         fvc.delegate = self 
      } 
     } 
} 

實現的tableView的FUNC將更新基礎上,選擇的標準的tableView數據源:

//In myTableViewController 
func tableViewCriteria(criteria: AnyObject) { 
    //update tableView data source base on criteria here 
    return 
} 

最後,只要需要返回tableview,就調用filterView的委託函數:

self.delegate?.tableViewCriteria(criteria: foo) 

瞧! :)

相關問題