点按时,UIButton图片不会更改

当我点击它时,我需要将图像button更改为不同的图像。 很简单,有样品,但他们不为我工作。 这是我试图遵循的例子:

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]; 

现在,我注意到我的button被设置为在UIControlEventTouchDown上执行其操作,所以我将它添加到“clicked”控制状态,如下所示:

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

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

问题是我的buttonPressed方法在主线程上做了很长的(ish)查询,出于某种原因,在这种情况下button的突出显示不起作用。

当我把查询移动到一个单独的线程时,高亮返回。

为了完成,我将把代码放在这里。 最初我是通过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); } }]; 

只要改变你的代码,一切都会工作!

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

里面buttonPressed方法设置yourButton.selected = YES; 也设置图像为米罗斯拉夫提到。

看来你正在把一个事件掩码UIControlEventTouchDown作为一个状态掩码解释在这一行:

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

事实上,我想你可能不需要这条线,因为你已经设置了合适的图像。 尝试从这一行删除UIControlEventTouchDown,或将整行注释掉。