点击它时,我需要将图像按钮更改为其他图像。很简单,那里有样品,但它们对我不起作用。这是我按照例子尝试的:
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];
但图像仍然保持不变。我错过了什么?
答案 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或注释掉整行。