无法在TouchUpInside事件后将UIButton保持在选定状态

我需要一个UIButton来保持按下状态。 基本上,如果一个button处于正常状态,我想触摸button,突出显示其标准的蓝色,然后提起我的手指后保持蓝色。 我做了下面的UIAction,并将buttonTouch Up Inside事件连接到它。

-(IBAction) emergencyButtonPress:(id) sender { if(emergencyButton.highlighted) { emergencyButton.selected = NO; emergencyButton.highlighted = NO; } else { emergencyButton.selected = YES; emergencyButton.highlighted = YES; } } 

但是,当我移开手指后,会发生什么事?button会回到白色背景。 对于testing,我添加了一个UISwitch并让它执行相同的代码:

 -(IBAction) emergencySwitchClick:(id) sender { if(emergencyButton.highlighted) { emergencyButton.selected = NO; emergencyButton.highlighted = NO; } else { emergencyButton.selected = YES; emergencyButton.highlighted = YES; } } 

在这种情况下,button会按照我的预期切换到高亮和非高亮状态。

Touch Up Inside事件发生后是否会发生另一个事件,将状态重置为“正常”? 如何保持突出显示的状态?

触摸/释放button时,突出显示的状态由iOS应用和删除。 所以不要依靠你的行动方法。

作为其他答案之一说,设置突出显示的图像是相同的选定图像,然后修改您的操作方法:

 -(IBAction) emergencyButtonPress:(id) sender { emergencyButton.selected = !emergencyButton.selected; } 

如果你想要的东西像一个切换button,定制你的“select”状态是你的“按下”状态,然后写这样的事情:

 - (IBAction)buttonTapped:(id)sender { [(UIButton*)sender setSelected:![sender isSelected]]; } 

如果你想要上面的代码工作,你应该为所选状态设置一个图像,并且为高亮状态设置一个(甚至是相同的)图像。

 [emergencyButton setBackgroundImage:buttonHighlightImage forState:UIControlStateHighlighted]; [emergencyButton setBackgroundImage:buttonHighlightImage forState:UIControlStateSelected]; 

希望能帮助到你。

我也有同样的问题,这是对我有用:

 -(IBAction)buttonPressed:(id)sender { if (isSelected) { [_button setSelected:NO]; [_button setImage:[UIImage imageNamed:@"not_selected.png"] forState:UIControlStateSelected]; isSelected=NO; } else { [_button setSelected:YES]; [_button setImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateSelected]; isSelected=YES; } } 

这是不可能的,只要你放手,苹果再次改变状态。 我之前使用过的一个选项(但不是很漂亮)是在按下button之后使用一个延迟为0.1的performSelector将其重新置于选定状态。 这在我的情况下工作。

编辑:如果你不想看到闪烁的效果,只需将延迟设置为0.0

这对我工作:

 - (void)tapButton:(id)sender{ UIButton *button = sender; if (!button.selected){ [self performSelector:@selector(highlight:) withObject:button afterDelay:0.0]; }else{ [self performSelector:@selector(removeHighlight:) withObject:button afterDelay:0.0]; } } - (void)highlight:(UIButton *)button{ button.selected = !button.selected; button.highlighted = YES; } - (void)removeHighlight:(UIButton *)button{ button.selected = !button.selected; button.highlighted = NO; } 

试试这个简单的答案….

 - (void)mybutton:(id)sender { UIButton *button = (UIButton *)sender; button.selected = ![button isSelected]; // Important line if (button.selected) { NSLog(@"Selected"); NSLog(@"%i",button.tag); } else { NSLog(@"Un Selected"); NSLog(@"%i",button.tag); } }