我需要一个UIButton来维持一个按下状态。基本上,如果按钮处于正常状态,我想触摸按钮,它突出显示其标准蓝色,然后抬起我的手指后保持蓝色。 我做了以下UIAction并将按钮Touch Up Inside事件连接到它。
-(IBAction) emergencyButtonPress:(id) sender
{
if(emergencyButton.highlighted)
{
emergencyButton.selected = NO;
emergencyButton.highlighted = NO;
}
else
{
emergencyButton.selected = YES;
emergencyButton.highlighted = YES;
}
}
但是,当我移开手指后,按钮会回到白色背景。对于测试,我添加了一个UISwitch并让它执行相同的代码:
-(IBAction) emergencySwitchClick:(id) sender
{
if(emergencyButton.highlighted)
{
emergencyButton.selected = NO;
emergencyButton.highlighted = NO;
}
else
{
emergencyButton.selected = YES;
emergencyButton.highlighted = YES;
}
}
在这种情况下,按钮会切换到突出显示的非突出显示状态,如我所料。
在Touch Up Inside事件之后是否会发生另一个事件,即将状态重置为“正常”?如何保持突出显示的状态?
答案 0 :(得分:6)
触摸/释放按钮时,iOS会应用和删除突出显示的状态。所以不要在你的行动方法中依赖它。
正如其他答案之一所说,将突出显示的图像设置为与所选图像相同,然后修改您的操作方法:
-(IBAction) emergencyButtonPress:(id) sender
{
emergencyButton.selected = !emergencyButton.selected;
}
答案 1 :(得分:2)
如果你想要一个类似切换按钮的东西,将你的“选中”状态自定义为你的“按下”状态,然后写下这样的东西:
- (IBAction)buttonTapped:(id)sender {
[(UIButton*)sender setSelected:![sender isSelected]];
}
答案 2 :(得分:1)
如果您希望上述代码有效,您应该为所选状态设置一个图像,并为其状态突出显示一个(甚至相同)。
[emergencyButton setBackgroundImage:buttonHighlightImage forState:UIControlStateHighlighted];
[emergencyButton setBackgroundImage:buttonHighlightImage forState:UIControlStateSelected];
希望它有所帮助。
答案 3 :(得分:1)
我有同样的问题,这对我有用:
-(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;
}
}
答案 4 :(得分:0)
不幸的是,这是不可能的,只要你放手,Apple就会再次改变状态。 我之前使用的一个选项(但不是很漂亮)是在按下按钮后再使用延迟为0.1的performSelector将其再次置于选定状态。这确实适用于我的情况。
编辑:如果您不想看到闪烁效果,只需将延迟设置为0.0
答案 5 :(得分: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;
}
答案 6 :(得分:0)
试试这个简单的答案......
- (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);
}
}