我在子视图中设置了GestureRecognizer来检测双击。当发生这种情况时,拥有的ViewController应该呈现一个新的ViewController。这似乎需要从View到其Controller的后向指针。
现在,这让我非常不对劲:糟糕的MVC等。但是必须有一个合适的设计。检测ViewController中的双击,然后通过event.view值确定哪个子视图?不过在某种程度上,在子视图中使用GestureRecognizer似乎要好得多。什么是最佳实践?
答案 0 :(得分:0)
向视图添加委托协议,该协议可以报告何时发生双击,并使视图控制器符合该协议。
示例强>
MyView.h:
@protocol MyViewDelegate;
@interface MyView : UIView
@property (nonatomic, weak) id <MyViewDelegate> delegate;
// stuff here
@end
@protocol MyViewDelegate <NSObject>
@optional
-(void)myViewDidDoubleTap:(MyView *)myView;
@end
MyView.m:
-(void)doubleTap:(id)sender { // your double tap method called by the gesture recognizer
if ([[self delegate] respondsToSelector:@selector(myViewDidDoubleTap:)])
[[self delegate] myViewDidDoubleTap:self];
}
然后在您的视图控制器标题(或类扩展,您的选择):
@interface MyViewController : UIViewController <MyViewDelegate>
在实施文件中初始化视图的位置:
MyView *myView = [[MyView alloc] init];
[myView setDelegate:self];
// do stuff here
最后添加委托方法:
-(void)myViewDidDoubleTap:(UIView *)myView {
// show your view controller here
}