iPhone SDK - UIButton突出显示状态问题

Bre*_*ett 2 iphone objective-c ios4

我对我的一个人的行为有困难UIButtons.我试图基本上使它成为一个切换按钮,但我遇到了下面的问题.

我有代码:

UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(horizontalOffset+buttonWidth, verticalOffset, buttonWidth, buttonHeight)];
    [likeButton setImage:[UIImage imageNamed:@"like-off.png"] forState:UIControlStateNormal];
    [likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateHighlighted];
    [likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateSelected];
    [likeButton addTarget:self action:@selector(likeButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

激发方法:

-(void)likeButtonPressed:(id)sender {
    UIButton *button = (UIButton *)sender; 
    [button setSelected:!button.selected];
}
Run Code Online (Sandbox Code Playgroud)

我看到的行为是,当我点击按钮(并突出显示)时,它按预期工作,并且'like-on.png'图像用于突出显示的状态,并且它在'selected'中保持打开状态州.

但是,当我再次点击按钮时,要将其关闭,当我按下手指时,我会看到灰色突出显示的状态.当我松开手指时,我看到'like-off'图像显示为预期.

当我将其关闭时,当我将手指按下按钮时,我想避免看到灰色突出显示的状态.相反,我想确保切换关闭时突出显示的状态使用代码中指定的'like-on.png'图像.

这里发生了什么?我的代码可能不正确的任何想法?

非常感谢,布雷特

Dar*_*ust 8

您缺少所选突出显示状态的图像:

[likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
Run Code Online (Sandbox Code Playgroud)

如果未设置,则使用正常状态的图像.从-[UIButton setImage:forState:]文档:

通常,如果没有为状态指定属性,则默认使用UIControlStateNormal值.

如果您不想在突出显示图像时修改它们,请设置:

likeButton.adjustsImageWhenHighlighted = NO;
Run Code Online (Sandbox Code Playgroud)

  • 就是这样!我刚刚学到了一些东西;-)我不知道那是如何指定多个状态的.非常感谢!!! (2认同)