我正在处理一个项目中的一些非常令人困惑的代码,似乎使用了一个手势来触发一个函数,并且该函数触发了一个选择器到父 View ,从而触发了一个函数,经过一些调整后工作正常。
问题是,子类在几个不同的父 View 中使用,因此使用 super View 查找选择器会导致崩溃,它存在于第一次使用中,但不存在于第二次使用中。
我该如何处理这个问题,以便它根据其父 View 调用不同的选择器?当前的设置看起来很老套,显然不能正常工作,因为它需要...下面的一些代码:
重用 View 通过此手势初始化:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bandBypassWasPressed:)];
[tap setDelegate:self];
[tap setCancelsTouchesInView:NO];
[self addGestureRecognizer:tap];
在其自身中调用此函数:
- (IBAction)bandBypassWasPressed:(UITapGestureRecognizer *)sender {
if (CGRectContainsPoint(self.bounds, [sender locationInView:self])) {
[self.superview performSelector:@selector(bandViewOn:) withObject:self];
[self setNeedsDisplay];
}
}
问题是“bandViewOn”仅存在于该 subview 的一次使用中的 super View 中,而不存在于另一个中,这意味着它会触发调用并使应用程序崩溃,因为那里没有具有该名称的函数。
我希望它根据其 super View 调用不同的函数。这是
- (void)lowBandBypass:(NSInteger)on {
NSLog(@"lowBandBypass CALLED");
_eqData.filter[1].bypass = on;
_lowBand.on = on;
[_lowBand setNeedsDisplay];
}
我该如何处理这个奇怪的问题......
干杯并欣赏它有点复杂!
最佳答案
您可以使用 respondsToSelector在调用方法之前检查 super View 是否实现了该方法。
if (CGRectContainsPoint(self.bounds, [sender locationInView:self])) {
if [self.superview respondsToSelector:@selector(bandViewOn:)] {
[self.superview performSelector:@selector(bandViewOn:) withObject:self];
}
[self setNeedsDisplay];
}
关于ios - 处理需要处理多个选择器的手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918623/