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

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


但是图像仍然保持不变。我想念什么?

最佳答案

问题是我的buttonPressed方法在主线程上做了很长的查询,由于某种原因,在这种情况下按钮的高亮显示不起作用。

当我将查询移到一个单独的线程时,突出显示继续。

为了完整起见,我将代码带到这里。最初,我是通过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);
    }
}];

09-10 00:40
查看更多