假设我有 2 个彼此相邻的 UIButton,当我将手指放在它们上时,它们都会从白色变为黑色。
这显然工作正常,但是如果我将手指放在按钮 1 上,它会变黑,然后当我将手指移到按钮 2 上而不抬起手指时,按钮 2 不会变黑,按钮 1 仍然是黑色的。
那么我怎样才能在一个按钮上“滑动”然后在另一个按钮上“滑动”并将突出显示的按钮从第一个按钮更改为第二个按钮。
假设我有 2 个彼此相邻的 UIButton,当我将手指放在它们上时,它们都会从白色变为黑色。
这显然工作正常,但是如果我将手指放在按钮 1 上,它会变黑,然后当我将手指移到按钮 2 上而不抬起手指时,按钮 2 不会变黑,按钮 1 仍然是黑色的。
那么我怎样才能在一个按钮上“滑动”然后在另一个按钮上“滑动”并将突出显示的按钮从第一个按钮更改为第二个按钮。
在您的视图控制器中覆盖 touchesMoved 事件。这将告诉您何时发生触摸。问题是您的按钮必须将 userInteractionEnabled 设置为 NO,以便它们不会吞噬触摸事件。如果您尝试执行自定义滑块或不需要实际按钮事件的操作,这将是可以的。
然后在 touchesMoved 中,您可以遍历您的按钮并查看按下了哪个按钮。这是在拖动输入时突出显示按钮的出色答案中窃取的一些代码
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *t in touches) {
CGPoint touchPoint = [t locationInView:self.view];
CGPoint testPoint = [self.view convertPoint:touchPoint toView:aButton];
if ([aButton pointInside:testPoint withEvent:event]) {
//Do something
}
//rest of code
[self.button1 addTarget:self
action:@selector(dragEnter:)
forControlEvents:UIControlEventTouchDragEnter];
[self.button2 addTarget:self
action:@selector(dragEnter:)
forControlEvents:UIControlEventTouchDragEnter];
[self.button1 addTarget:self
action:@selector(dragExit:)
forControlEvents:UIControlEventTouchDragExit];
[self.button2 addTarget:self
action:@selector(dragExit:)
forControlEvents:UIControlEventTouchDragExit];
- (void)dragEnter:(id)sender
{
UIButton *button = (UIButton *)sender;
button.highlighted = YES;
}
- (void)dragExit:(id)sender
{
UIButton *button = (UIButton *)sender;
button.highlighted = NO;
}