我应该使用didSelectRowAtIndexPath,prepareForSegue还是两者?

时间:2017-04-04 04:22:13

标签: ios swift uitableview

我正在构建一个向用户呈现UITableView的应用程序,用户需要从中进行选择。一旦选择了一行,它们就会显示另一个ViewController,它显示了它们在前一个ViewController上所做的选择的细节。

这里有一个问题:在用户做出选择之后,应用程序需要调用网络来检索要在下一个ViewController上显示的一些数据。我打算从prepareForSegue方法调用一个方法,该方法将返回网络调用的结果,然后调用相应的ViewController,但是我想知道这是否应该从" didSelectRowAtIndexPath&调用#34;方法(我还没有实现)。

我担心第二个ViewController会在调用网络之前被调用,并返回我需要显示的数据。这甚至是进行这种网络呼叫的地方,还是我应该从" viewDidLoad"目的地ViewController的方法改为?什么是最好的架构,为什么?

2 个答案:

答案 0 :(得分:1)

didSelectRowAtIndexPath 方法中调用 prepareForSegue 方法导航到secondViewController然后显示详细信息,在secondViewController的 viewDidLoad 方法中进行网络调用并显示< em> activityIndi​​catorView ,直到获取数据。

答案 1 :(得分:1)

我会在prepareForSegue中使用一些异步加载,并在详细信息视图中进行管理。一旦显示详细信息视图,您必须通知用户正在加载某些内容(存在适当的转轮),然后在加载完成后填充界面(或管理加载错误)。

但是如果您始终告知用户当前的加载情况,那么使用详细信息视图的viewDidLoad也可以。

不要使用didSelectRow,因为它只是用于选择...在tableview单元格上无法导航!

异步是首选,因为它不会阻止用户处于一些奇怪的状态,等待他真正知道的事情。