我有一个带有子视图的视图控制器:视图控制器通过插座引用的gestureView。我已经从父视图控制器的viewDidLoad分配了一个轻触手势到gestureView,如:
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self.gestureView action:@selector(handleTap)];
[self.gestureView addGestureRecognizer:tapGesture];
gestureView使用一个自定义类,其中handleTap:已经实现并且工作正常,我可以从gestureView的handleTap:中记录,但是当轻触gestureView时,如何从当前视图控制器执行segue到另一个视图控制器。
我知道可能有更简单的方法可以做到这一点,但这最适合我的情况。
答案 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:
中的下一个视图控制器。