如何使用新数据重新加载或刷新选项卡栏控制器的选项卡栏中的数据?

Posted

技术标签:

【中文标题】如何使用新数据重新加载或刷新选项卡栏控制器的选项卡栏中的数据?【英文标题】:How to reload or refresh data in tab bars in tab bar controllers with new data? 【发布时间】:2012-04-06 21:49:27 【问题描述】:

我有 3 个带有标签栏控制器的标签。标签栏中的所有 3 个视图控制器都有导航控制器,可以自行转到其他视图控制器。

标签栏中的视图控制器之一是带有地图和地图注释(地图视图控制器)。这些注释来自基于应用程序启动时的当前位置的 Web 服务。在地图视图控制器中,顶部有一个导航栏项(搜索按钮),使您可以在地图上搜索不同的位置。单击搜索按钮后,搜索视图控制器将被推送到导航堆栈。搜索完成并找到新位置后,新位置将显示在同一搜索视图控制器的表视图中。

我的目标是在单击表格视图项后自动返回地图视图,并根据新搜索的位置在地图上加载新的注释数据。再次显示地图视图后,应用程序首次启动时检索的旧数据应替换为从 Web 获取的新数据。标签栏中的所有3个视图控制器通过单例对象共享注释数据。

我的问题是,当用户单击搜索视图控制器中 didSelectRowAtIndexPath 方法中的项目时,我应该怎么做才能返回到带有新数据的地图视图?返回选项卡栏中的地图视图并从 Web 服务再次加载数据的最佳方法是什么?

我是否在搜索视图控制器中使用“popViewControllerAnimated”,然后在地图视图控制器“viewWillAppear”方法中工作?如何将新位置的纬度和经度值从搜索视图控制器传递给地图视图控制器?我是否将地图视图控制器导入到搜索视图控制器中,并将地图视图控制器的 ivar 设置为纬度和经度,即使“搜索视图控制器”是由“地图视图控制器”推动而产生的?由于地图视图控制器已经在内存中,因此将地图视图控制器导入搜索视图控制器有什么复杂性?

我想要完成的工作类似于免费应用程序“Wikihood”在搜索地图时所做的工作。

非常感谢。

【问题讨论】:

【参考方案1】:

看来您可以使用单例对象作为数据模型。这样,viewWillAppear: 只会显示当前在数据模型中设置的任何位置,并且您的搜索控制器可以方便地放置其结果。

想到的其他选项是委托或通知,但由于您已经拥有模型对象,因此继续使用它是一致的。

【讨论】:

非常感谢您的快速回复。我为此考虑了单例对象,但我认为会有更好的方法。我将尝试使用单例对象来存储纬度和经度值。你只是使用'popViewControllerAnimated'返回地图视图来触发刷新,还是有更好的方法?谢谢。 如果你使用 push 来到达那里,pop 是正常的返回方式。如果还有其他方法,那可能不会更好。 :) 顺便说一句,正如您所建议的,我将 lat 和 lon 数据放入 sigleton 对象中,效果很好。它在逻辑上非常合适。非常感谢。 很高兴听到。如果你还没有使用过单例,我可能不会建议它,因为代表更优雅,但既然你已经有了,为什么不......

以上是关于如何使用新数据重新加载或刷新选项卡栏控制器的选项卡栏中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

当用户返回到 UITabBarController 选项卡时如何刷新表数据

在Vue中重新加载或刷新页面时如何显示正确的嵌套子选项卡

尝试访问重新加载或刷新或在角度 5 的新选项卡中访问时收到 AccessDenied

仅使用一个视图控制器的具有多个选项卡的选项卡栏

当点击 FCM 推送通知时,如何在选项卡栏中打开特定的视图控制器?

iOS:选择选项卡之前的选项卡栏项目标题