繁体   English   中英

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

[英]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使用自定义类,其中实现了handleTap:,并且工作正常,我可以从gestureView的handleTap:进行日志记录,但是,当轻按gestureView时,如何执行从当前视图控制器到另一个视图控制器的排序。

我了解可能有更简单的方法来执行此操作,但这对我的情况最有效。

您可以使用代理模式或通知模式。 两种情况都可以使用,因为-handleTap()方法在子视图中实现,因此可以在子视图类中创建协议 当您获得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];
 }

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

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

您将要执行的Segue是情节提要中从当前视图控制器到下一个视图控制器的序列。 (您需要创建此)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM