【问题标题】:Should I use didSelectRowAtIndexPath, prepareForSegue, or both?我应该使用 didSelectRowAtIndexPath、prepareForSegue 还是两者都使用?
【发布时间】:2017-08-29 02:53:27
【问题描述】:

我正在构建一个向用户展示 UITableView 的应用程序,用户需要从中进行选择。一旦选择了一行,他们就会看到另一个 ViewController,其中显示了他们在前一个 ViewController 上所做的选择的详细信息。

这里有一个问题:在用户做出选择之后,应用需要调用网络来检索一些数据以显示在下一个 ViewController 上。我正计划从 prepareForSegue 方法调用一个方法,该方法将返回网络调用的结果,然后调用适当的 ViewController,但我想知道这是否应该从“didSelectRowAtIndexPath”方法调用(我尚未实施)。

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

【问题讨论】:

标签: ios swift uitableview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    但是使用详细视图的viewDidLoad 也可以,只要您始终通知用户当前正在加载...

    不要使用didSelectRow,因为它只是用于选择...表格视图单元格上不能有导航!

    首选异步,因为它不会阻止用户在某种奇怪的状态下等待他确实知道的东西。

    【讨论】:

    • 我同意你的观点,调用必须是异步的。我的问题是,这个调用应该在哪里进行,didSelectRowAtIndexPath、prepareForSegue 还是 viewDidLoad?我倾向于的方法是从 didSelectRowAtIndexPath 进行调用,并使用结果构建我的对象,并将其传递给我的 prepareForSegue 方法,该方法将对象传递给 detailViewController。你的想法?
    • 我告诉过你,didSelectRowAtIndexPath 不是为此而设计的,因为选择并不意味着要查看详细信息...所以prepareForSegueviewDidLoad
    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多