从View中与ViewController交谈

时间:2014-08-06 20:55:12

标签: ios uiviewcontroller uigesturerecognizer

我在子视图中设置了GestureRecognizer来检测双击。当发生这种情况时,拥有的ViewController应该呈现一个新的ViewController。这似乎需要从View到其Controller的后向指针。

现在,这让我非常不对劲:糟糕的MVC等。但是必须有一个合适的设计。检测ViewController中的双击,然后通过event.view值确定哪个子视图?不过在某种程度上,在子视图中使用GestureRecognizer似乎要好得多。什么是最佳实践?

1 个答案:

答案 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

}