2012-01-11 44 views
5

我需要UIButton来保持按下状态。基本上,如果一个按钮处于正常状态,我想触摸按钮,突出显示其标准的蓝色,然后抬起我的手指后保持蓝色。 我做了以下UIAction并将按钮Touch Up Inside事件连接到它。TouchUpInside事件后无法将UIButton保持在选定状态

-(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事件发生后是否发生了另一个事件,它将状态重置为“正常”?我如何保持突出显示的状态?

回答

1

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

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

希望它有帮助。

+0

感谢您的回复。我将这些行添加到了我的viewdidload:函数中。现在,当我按住按钮时,我看到图像,但是当我让按钮转到白色时,它会回到白色 – WolfpackEE 2012-01-11 15:13:22

2

如果你想要的东西像一个切换按钮,自定义您的“选择”状态下的“按下”状态,然后写是这样的:只要

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

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

编辑:如果你不希望看到的闪烁效果,只需设置延时为0.0

+0

哇,这确实有效。有一个从蓝色到白色到蓝色的快速按钮。我必须看看最终用户是否可以接受。谢谢你的提示。 – WolfpackEE 2012-01-11 16:24:57

+0

没问题,如果它适合你,你能把这个标记为正确答案吗?如果所有文章的答案都标为:) – 2012-01-12 09:31:03

6

高亮显示的状态施加并移除通过iOS的,当你触摸/松开按钮。所以不要依靠你的行动方法。

至于其他的答案中的一个说,设置高亮显示的图像是一样的选择图像,然后修改你的操作方法:

-(IBAction) emergencyButtonPress:(id) sender 
{ 
    emergencyButton.selected = !emergencyButton.selected;  
} 
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; 
} 
} 
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; 
} 
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); 

    } 
} 
+0

你能解释一下'button.selected =![button isSelected];'为什么它很重要,它在做什么? – jckly 2014-04-24 21:16:15

相关问题