子类MKMapView并使其成为mapview委托,同时仍允许其他委托

时间:2013-10-29 04:44:26

标签: ios objective-c delegates mkmapview mapkit

我遇到了设计问题。这就是我想要做的事情:我希望将MKMapView约束到特定区域,同时使其成为想要实际使用地图的视图控制器的抽象。

要约束地图视图,我很可能希望使用委托方法mapView:regionDidChangeAnimated:并获得更改通知,并在区域超出预定区域时将地图移回。但是,因为我想让它足够通用,所以我不希望代码在视图控制器中。我想我可能想要替换MKMapView。

如果我这样做,我会有一个MKMapView的子类(比如一个ConstraintMapView类),它也是MKMapView的委托,并公开方法将区域约束到任何班级的用户。但是,类的用户(比如一个视图控制器)也希望成为MKMapView的委托,所以我还想将所有委托消息转发给视图控制器。

为此,我需要一个指向真实委托(视图控制器)的委托属性,但是在我的ConstriantMapView中,如果我有一个,这意味着我覆盖了MKMapView对委托人的setter和getter事情变得有点复杂,因为在MKMapView内部它可以调用ConstraintMapView的方法,我会给它视图控制器,但我真的想要改为给它ConstraintMapView

  1. 有没有办法让这项工作?
  2. 是否有一个更好的问题模式可以使控制器免于将视图移回约束区域的细节?

2 个答案:

答案 0 :(得分:1)

我在这个项目中做了类似的代理MKMapViewDelegate;看看:

https://github.com/mapbox/mbxmapkit

答案 1 :(得分:0)

如果想要对现有类进行过度操作,可以使用“装饰器设计模式”。以下是简要说明。
http://www.raywenderlich.com/46988/ios-design-patterns希望它有所帮助