添加一个调用另一个类中的方法的手势
简单地说,我想为UIImageView
添加一个轻UIImageView
手势,当用户触摸时,调用另一个类(不是包含UIImageView
的同一个类)中实现的方法。
我可以这样做,如果是这样,我该怎么办?
你可以做到这一点。 但是您需要将目标类的实例(将在其中执行方法的类)作为委托或手势添加类中的某些内容。
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self.delegate action:@selector(doSomething)];
这里的委托将是你去那个类之前必须设置的目标类的实例。
编辑
我会解释一下。 假设您有两个视图控制器类VCA和VCB。 你想通过点击手势从VCB调用VCA中的方法。
在VCB.h中
@property (nonatomic,assign)VCA *delegate;
在VCB.m
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self.delegate action:@selector(doSomething)];
在VCA.m
您将呈现/推送VCB
VCB * viewController = [[VCB alloc]init]; viewController.delegate = self; // push or present viewController
在init上声明识别器选择器
UITapGestureRecognizer *recognizer = [UITapGestureRecognizer initWithTarget:objectOfAnotherClass action:@selector(methodImplementedOnObjectOfAnotherClass:)];
- 不要忘记定义点击次数( numberOfTapsRequired )和失败所需的可选手势识别器( requireGestureRecognizerToFail 🙂
链接到关于选择器的文章。
一种直接的方法是从tapGesture
的选择器方法调用另一个类的方法即。
将UITapGestureRecogniser添加到imageview
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapRecognised)]; [imageView addGestureRecognizer:tapGesture];
不要忘记启用UIImageView的userInteraction
,因为默认情况下对于imageview userInteraction是禁用的。
你可以像下面这样做。
imageView.userInteractionEnabled = YES;
然后在tapGestureRecogniser的选择器中调用另一个类的方法
- (void)tapRecognised { [next tappedOnImage]; }
next
是另一个类的对象。 您也可以使用委托来调用该方法。
希望这会帮助你。
这里self.desired视图是你想添加手势的视图,你应该按照以下方式添加手势
和“webViewTapped.delegate = self”意味着你想在用户点击时调用同一个类的函数,你可以使用委托像self.delegate将它改成你想要的函数
UITapGestureRecognizer *viewTapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)]; webViewTapped.numberOfTapsRequired = 1; webViewTapped.delegate = self; [self.desiredView addGestureRecognizer:viewTapped]; - (void)tapAction:(UITapGestureRecognizer *)sender; { // do your stuff here }