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

How to segue to another view controller when a subview with a gesture is tapped?

我有一个带有子视图的视图控制器:gestureView 由视图控制器通过插座引用。我已将父视图控制器的 viewDidLoad 中的点击手势分配给 gestureView,如:

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

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

我知道可能有更简单的方法来执行此操作,但这最适合我的情况。

handleTap 中,对您接下来要显示的另一个视图控制器执行 segue。

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

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

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

您可以使用 Delegate 模式或 Notification 模式。 两者都适用于您的情况,因为 -handleTap() 方法在您的子视图中实现,您可以在 子视图 class 中创建 protocol . 当你获得 handleTap 方法时,你可以调用应该在你的父 class.

中实现的委托方法

在你的子视图中class上面class声明定义协议

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

定义委托 属性。

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

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

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

在你的父 class 中实现了子视图的委托 class

@interface ParentViewController : UIViewController <SubViewClassDelegate>

viewDidLoad

self.gestureView.delegate = self;

并在父控制器中实现子视图class的委托方法

-(void) subviewDidTapped:(id)sender {

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