看起来您正试图将一个手势识别器附加到多个按钮。手势识别器一次只能附加到一个视图。因此,在您的情况下,您将识别器附加到的最后一个按钮(按钮 B1)可能会响应双击,但 A1 和 A2 不会。
为每个按钮创建一个单独的识别器。
但是所有三个识别器都可以调用相同的操作方法(handleDoubleTap:
)。
但是,当您尝试单击按钮时,会稍有延迟,因为它会等待查看是否是双击的开始。有一些方法可以减少延迟,但如果您可以忍受延迟并且变通办法会带来其他问题,则可能不值得。
编辑:
在您的评论中,您说您“想检测它们是否同时被按下”。为此,您不需要手势识别器。您可以只使用提供的标准控制事件。
接下来,在 IB 中,对于每个按钮,将“Touch Down”事件与buttonPressed:
. 或者,以编程方式进行:
[button1 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button2 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button3 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
接下来,在 IB 中,对于每个按钮,将“Touch Up Inside”和“Touch Up Outside”事件与buttonReleased:
. 或者,以编程方式进行:
[button1 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
[button2 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
[button3 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
接下来,添加 ivars 以跟踪按下了多少或哪些按钮:
@property (nonatomic) int numberOfButtonsBeingTouched;
@property (strong, nonatomic) NSMutableSet *buttonsBeingTouched; //alloc + init in viewDidLoad or similar
如果您只关心按下了多少个按钮,则不需要NSMutableSet
.
最后,添加 buttonPressed 和 buttonReleased 方法:
- (IBAction)buttonPressed:(UIButton *)button {
self.numberOfButtonsBeingTouched++;
[self.buttonsBeingTouched addObject:button];
//your logic here (if (self.numberOfButtonsBeingTouched == 3) ...)
}
- (IBAction)buttonReleased:(UIButton *)button {
self.numberOfButtonsBeingTouched--;
[self.buttonsBeingTouched removeObject:button];
//your logic (if any needed) here
}