2016-10-04 64 views
1

對於我的應用程序,我需要多次推送相同的TableViewController。當用戶點擊didSelect時,我需要在導航堆棧中推送相同的控制器。多次將相同的TableViewController導入導航堆棧

我的應用程序是文件管理器應用程序,它連接到ftp服務器並顯示用戶內部的內容。但是文件夾中可能包含更多文件夾(無限)的文件夾。

爲此,我不能創造大量TableViewControllers的故事板,當我試圖把同一個控制器到導航堆棧與此:

navigationController?.pushViewController(self, animated: true) 

我得到錯誤說我不能把相同的控制器導航堆棧。 所以我創造我的控制器的新實例,並試圖把這樣的:

let newMyTableVC = MyTableVC() navigationController?.pushViewController(newMyTableVC, animated: true)

但是有了這個,我也得到錯誤說:

「不能出隊細胞與標識符FolderCell - 必須註冊一個筆尖或類的標識符或連接故事板的原型單元格'

所以我從這個錯誤理解我的第一個TableViewController使用是我的細胞標識符,它在內存上。當我嘗試傳遞具有相同單元標識符的TableViewController的新實例時,它會崩潰,因爲單元格已經存在,並且具有相同的標識符(可能是我錯了)。

If i am on right track doing this with approach at the above { 
    How do i reuse cells with dynamic identifier and provide data to them. 
} else { 
    How do i accomplish what i want? 
    } 

謝謝你的時間。

+0

爲什麼每次創建一個新的控制器,而不是隻是改變數據集以匹配當前的目錄?然後使用TableView的reloadData()功能? – Guardanis

+1

它是一個非常好的方法。給表格視圖控制器一個故事板ID,並用self.storyboard instantiateViewControllerWithId實例化。 – danh

+0

嘿傢伙感謝回覆。我需要每次創建新的控制器,因爲我希望用戶能夠從緩存中的最後一個文件夾視圖控制器取回,而無需等待新的網絡請求和重新加載tableView。當用戶點擊單元並重新加載數據而不是將新的視圖控制器推入導航堆棧時,這也是不好的用戶體驗。 –

回答

1

當您創建一個新的實例是這樣的:

let newMyTableVC = MyTableVC() 

它是完全獨立的故事板。重要的是,它因此對故事板中定義的原型單元一無所知。因此,錯誤的相關位是「......或連接故事板中的原型單元格」。

爲了避免這個問題,在故事板的表視圖控制器設置標識,然後使用:

let newMyTableVC = self.storyboard!.instantiateViewControllerWithIdentifier("identifier") as! MyTableVC 
+0

謝謝你的回答,它完美的作品。我從來沒有想過這種方式,即使我已經多次使用這種方法。那麼當我需要故事板中的視圖控制器實例時,我應該使用這種方法嗎? –

+1

@YasinNazlıcan是的,如果你想使用storyboard中的設計和佈局,你必須使用instantiateViewControllerWithIdentifier或使用segue。 – pbasdf