
在iOS编程中,我们在视图控制器之间有这种通信方式.你可以在“Coordinating Efforts Between View Controllers” in the *View Controller Programming Guide for iOS”阅读它.
但我认为用一个具体的例子来理解它会更容易.让我们使用适用于iPhone的Google地图应用:
我不确切知道这个应用程序是如何实现的.但是我们假设有一个顶层的AppVIEwController来管理搜索栏(在顶部)和位置栏(在底部),它在一个容器视图中嵌入了一个MapVIEwController.
视图控制器之间存在一些交互.当用户搜索时,AppVIEwController需要告诉MapVIEwController放置一些地图标记并放大其中一个.当用户点击地图标记时,MapVIEwController需要告诉AppVIEwController在底部的位置栏中显示有关该标记的信息.
所以这是模式.
首先,我们为MapVIEwController(它是嵌入式视图控制器)将发送给AppVIEwController(它是容器视图控制器)的消息定义一个协议:
@class MapMarker;@class MapVIEwController;@protocol MapVIEwControllerDelegate <NSObject>- (voID)mapVIEwController:(MapVIEwController *)mapVIEwController dIDSelectMarker:(MapMarker *)marker;@end
我们将使AppVIEwController符合此协议.因此MapVIEwController不需要专门了解AppVIEwController.它只需要引用一些符合协议的对象. MapVIEwController还需要了解设置其标记的消息以及缩放到特定标记的消息.所以我们像这样声明MapVIEwController:
@interface MapVIEwController : UIVIEwController@property (nonatomic,weak) ID<MapVIEwControllerDelegate> delegate;- (voID)setMarkers:(NSArray *)markers;- (voID)zoomToMarker:(MapMarker *)marker;@end
请注意,委托属性较弱以避免保留周期.
AppVIEwController需要符合MapVIEwControllerDelegate协议.通常我们在AppVIEwController.m中的类扩展中声明一致性,因为一致性不需要是AppVIEwController的公共接口的一部分. AppVIEwController还需要对MapVIEwController的引用.
@interface AppVIEwController () <MapVIEwControllerDelegate>@property (nonatomic,strong) MapVIEwController *mapVIEwController;@end
接下来,我们进入故事板,选择嵌入segue,并给它一个标识符:
现在我们可以实现prepareForSegue:sender:方法来连接属性:
@implementation AppVIEwController- (voID)prepareForSegue:(UIStoryboardSegue *)segue sender:(ID)sender { if ([segue.IDentifIEr isEqualToString:@"MapEmbedding"]) { [self prepareForMapEmbeddingSegue:segue sender:sender]; }}- (voID)prepareForMapEmbeddingSegue:(UIStoryboardSegue *)segue sender:(ID)sender { self.mapVIEwController = segue.destinationVIEwController; self.mapVIEwController.delegate = self; // We can do any additional setup on mapVIEwController here,// like set its initial vIEwport.} 注意,AppVIEwController还必须实现mapvIEwController:dIDSelectMarker:,而MapVIEwController需要实现setMarkers:和zoomToMarker:.
总结以上是内存溢出为你收集整理的ios – 与容器视图通信的最佳实践是什么?全部内容,希望文章能够帮你解决ios – 与容器视图通信的最佳实践是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)