我刚开始使用iOS(来自Android),我无法弄清楚如何在标签中的视图之间传递数据。我已经包含了一些图片来更详细地描述我的问题;当选中其中一个选择器或者在勾选布尔开关时出现/消失的用户位置时,如何更改地图类型?
一个标签是地图标签:
The Other是一个选择器:
答案 0 :(得分:3)
快速回答是视图控制器彼此交谈。
编辑:我知道我必须回来。
这取决于你从哪里开始。
但是This thread似乎很受欢迎并且有一个示例项目。可能需要调整以使用更现代的iOS版本 - 但它确实提供了一般的想法。
在您的应用程序中执行此操作的一种方法是在视图控制器上具有属性,该属性显示关于其显示的视图类型的地图,以及是否显示当前位置。然后,从选择器的视图控制器中设置这些属性。
如何获取地图的视图控制器 - 在创建时将其传递给选择器的控制器。抵制让地图控制器成为Application委托的属性的诱惑。这是一种传递它的简单方法,但它破坏了封装IMO。
暂且不谈。
随着您的进步,您将意识到执行此操作的方法是将控件作为子视图覆盖在地图视图上。这不仅是一个更好的UI(所有更改都可以在适当的位置进行),但是当您在同一个视图上时,您不需要使用不同的视图控制器,也不需要传递对象指针。 :)
答案 1 :(得分:2)
您应该查看此主题以获取每种可能方法的详细说明:
What's the best way to communicate between view controllers?
答案 2 :(得分:1)
您必须使用NSNotifications
或NSUserDefaults
答案 3 :(得分:0)
对于这种类型的“设置”视图,我将创建一个自定义协议,并将您的地图视图设置为设置视图中的委托对象。如果您需要代码,请告诉我。
答案 4 :(得分:0)
好吧,我的第一个答案是标签界面可能不合适。标签栏用于提供并行使用模式(例如,显示警报或计时器的监视应用程序),而不是提供辅助信息。你可能应该在mapview上有一个按钮,它会拉出一个模态对话框来更改设置。然后使用委托模式将更改的信息发送回父级。有关示例代码,请参阅有关模态视图控制器的Apple文档。