当点击带手势的子视图时,如何切换到另一个视图控制器?

时间:2015-04-07 04:48:51

标签: ios objective-c uiview uiviewcontroller xcode6

我有一个带有子视图的视图控制器:视图控制器通过插座引用的gestureView。我已经从父视图控制器的viewDidLoad分配了一个轻触手势到gestureView,如:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self.gestureView action:@selector(handleTap)];
[self.gestureView addGestureRecognizer:tapGesture];

gestureView使用一个自定义类,其中handleTap:已经实现并且工作正常,我可以从gestureView的handleTap:中记录,但是当轻触gestureView时,如何从当前视图控制器执行segue到另一个视图控制器。

我知道可能有更简单的方法可以做到这一点,但这最适合我的情况。

2 个答案:

答案 0 :(得分:1)

您可以使用委托模式或通知模式。 两者都适用于您的情况,As-handleleTap()方法在您的子视图中实现,您可以在子视图类中创建协议。 当你得到handleTap方法时,你可以调用应该在你的父类中实现的委托方法。

在子视图类上面的类声明定义协议

@protocol SubViewClassDelegate <NSObject>
@required;
- (void) subviewDidTapped:(id) sender;
@end

定义委托的属性。

@property (nonatomic, unsafe_unretained) id<SubViewClassDelegate> delegate;

在子视图的类调用委托方法的实现文件中。

- (void) handleTap   {
        if ([self.delegate respondsToSelector:@selector(subviewDidTapped:)]) {
[self.delegate subviewDidTapped:yourObject]; // in yourObject you can pass data if require.
}
}

在您的父类实现的子视图类的委托

@interface ParentViewController : UIViewController <SubViewClassDelegate>

viewDidLoad

self.gestureView.delegate = self;

在Parent控制器中实现Subview类的委托方法。

-(void) subviewDidTapped:(id)sender {

 // Navigate using performSegueWithIdentifier:
[self performSegueWithIdentifier: @"segueIdentifier" sender: self];
 }

答案 1 :(得分:0)

handleTap中,对下一个要显示的其他视图控制器执行segue。

 [self performSegueWithIdentifier: @"YOU_SEGUE_IDENTIFIER" sender: self];

您将执行的segue是故事板中从当前视图控制器到下一个视图控制器的segue。 (你需要创建它)。

通过检查segue标识符,一旦您确定它是正确的发件人,您就可以将参数传递到prepareForSegue:sender:中的下一个视图控制器。