我遇到了设计问题。这就是我想要做的事情:我希望将MKMapView
约束到特定区域,同时使其成为想要实际使用地图的视图控制器的抽象。
要约束地图视图,我很可能希望使用委托方法mapView:regionDidChangeAnimated:
并获得更改通知,并在区域超出预定区域时将地图移回。但是,因为我想让它足够通用,所以我不希望代码在视图控制器中。我想我可能想要替换MKMapView。
如果我这样做,我会有一个MKMapView
的子类(比如一个ConstraintMapView
类),它也是MKMapView
的委托,并公开方法将区域约束到任何班级的用户。但是,类的用户(比如一个视图控制器)也希望成为MKMapView
的委托,所以我还想将所有委托消息转发给视图控制器。
为此,我需要一个指向真实委托(视图控制器)的委托属性,但是在我的ConstriantMapView
中,如果我有一个,这意味着我覆盖了MKMapView
对委托人的setter和getter事情变得有点复杂,因为在MKMapView
内部它可以调用ConstraintMapView
的方法,我会给它视图控制器,但我真的想要改为给它ConstraintMapView
。
答案 0 :(得分:1)
我在这个项目中做了类似的代理MKMapViewDelegate
;看看:
答案 1 :(得分:0)
如果想要对现有类进行过度操作,可以使用“装饰器设计模式”。以下是简要说明。
http://www.raywenderlich.com/46988/ios-design-patterns希望它有所帮助