点击时UIButton图像不会改变

时间:2013-12-27 13:45:17

标签: ios objective-c uibutton

点击它时,我需要将图像按钮更改为其他图像。很简单,那里有样品,但它们对我不起作用。这是我按照例子尝试的:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 270, 200, 40.0);
[button setImage:[UIImage imageNamed:@"butterfly3.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
[button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Submit" forState:UIControlStateNormal];
[scrollView button];

现在,我注意到我的按钮设置为在UIControlEventTouchDown上执行操作,因此我将其添加到“点击”控件状态,如下所示:

[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected | UIControlStateHighlighted | UIControlEventTouchDown];

但图像仍然保持不变。我错过了什么?

4 个答案:

答案 0 :(得分:1)

问题是我的buttonPressed方法在主线程上执行了一个长(ish)查询,由于某种原因,按钮的突出显示在这种情况下不起作用。

当我将查询移动到单独的线程时,突出显示重新开启。

为了完成,我将把代码带到这里。最初我通过Parse.com API获取对象,如下所示:

[myQuery findObjects]

以上是对主线程的查询并阻止其他所有内容。

然后我把它改成了这样一个单独的线程:

[myQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if(!error) {
            // whatever is needed to be done
        }
    } else {
        NSLog(@"Error while fetching objects %@", error.description);
    }
}];

答案 1 :(得分:0)

只需改变你的代码,一切都会有效!

[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected];

答案 2 :(得分:0)

在buttonPressed方法中设置yourButton.selected = YES;还设置了Miroslav提到的图像。

答案 3 :(得分:0)

看来您正在放置一个事件掩码 UIControlEventTouchDown ,该事件掩码被解释为此行中的状态掩码:

[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected | UIControlStateHighlighted | UIControlEventTouchDown];

事实上,我认为您可能根本不需要这一行,因为您已经设置了适当的图像。尝试从此行中删除UIControlEventTouchDown或注释掉整行。