2017-04-04 59 views
0

我正在構建一個應用程序,向用戶展示UITableView,用戶需要從中進行選擇。一旦選擇了一行,它們就會呈現另一個ViewController,它顯示了他們在前一個ViewController上所作選擇的細節。我應該使用didSelectRowAtIndexPath,prepareForSegue還是兩者?

下面是catch:在用戶做出選擇之後,應用程序需要調用網絡來檢索一些數據以顯示在下一個ViewController上。我打算從prepareForSegue方法調用一個方法,它將返回網絡調用的結果,然後調用相應的ViewController,但是我想知道這是否應該從「didSelectRowAtIndexPath」方法中調用(我沒有實現)。

我擔心的是第二個ViewController會在調用網絡之前調用,並返回需要顯示的數據。這甚至是放置此類網絡調用的地方,還是應該使用目標ViewController的「viewDidLoad」方法調用此調用?什麼是最好的架構,爲什麼?

+1

http://stackoverflow.com/a/41887007/5461400 –

+1

返回數據執行segue後。請嘗試以上鍊接 –

回答

1

呼叫prepareForSegue內部didSelectRowAtIndexPath方法方法方法來導航到secondViewController然後以顯示細節,使內部viewDidLoad中 secondViewController的方法網絡呼叫,並顯示activityIndi​​catorView,直到數據被取出。

1

我會使用一些異步加載從prepareForSegue開始,並在詳細信息視圖中進行管理。一旦出現詳細信息視圖,您必須通知用戶正在加載的內容(存在適當的轉輪),然後在加載完成後填充界面(或管理加載錯誤)。

但使用的細節viewDidLoad看法是也沒關係,只要你始終告知當前加載的用戶...

不要使用didSelectRow,因爲它只是供選擇......可以有在桌面單元上沒有導航!

異步是首選,因爲它不會阻止用戶處於一些奇怪的狀態,等待他真正知道的事情。

+0

我同意你的意見,該電話必須是異步的。我的問題是,應該在哪裏調用,didSelectRowAtIndexPath,prepareForSegue或viewDidLoad?我傾向於的方法是從didSelectRowAtIndexPath中調用,並用結果構建我的對象,並將其傳遞給我的prepareForSegue方法,該方法將對象移交給detailViewController。你的想法? – syedfa

+0

我告訴過你,'didSelectRowAtIndexPath'不適用於此,因爲選擇並不意味着要進入詳細視圖......所以要麼是'prepareForSegue'或'viewDidLoad'。 –

相關問題