1

我正在UIButtons使用图像。现在我希望能够在UIImage按下该按钮时在该按钮上方设置另一个,并在再次按下时将其移除。

列表的某种复选标记。

编辑:

我在按钮上的图像是来自手机内存的图像。我不能只是将图像更改为另一个图像,因为图像是从内存加载的,而不是外部资产。所以我需要在所有按下的按钮上方放置一些固定图像。

  1. 我应该把它作为另一个添加UIButton到以前的吗?
  2. 我应该把它放在它UIImage上面吗?它UIButton仍然会被触及吗?

什么是最好的方法?谢谢。

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(column*100+10, row*100+10, 92, 92); // distnace related to scroller(not view)
        [button setImage:thumb forState:UIControlStateNormal];
        [button addTarget:self
                   action:@selector(buttonClicked:)
         forControlEvents:UIControlEventTouchUpInside];
4

3 回答 3

0

由于您有自定义按钮,最好的解决方案是根据您拥有的复选框的状态更改按钮的图像(您提到这个想法是创建类似于复选框按钮的东西)。

UIButton 类中有一个名为“setImage:forState:”的方法。您可以使用上述方法更改按钮内的图像。在此处查看更多信息

示例我如何查看代码(您可以以另一种方式查看):

// bool property
@property (assign) BOOL isChecked;
....
// custom button
UIButton *theCheckboxButton = ;
[theCheckboxButton setImage:[UIImage imageNamed:@"Unchecked"] forState:UIControlStateNormal];
[theCheckboxButton setImage:[UIImage imageNamed:@"Checked"] forState:UIControlStateSelected];
[theCheckboxButton addTarget:self action:@selector(checkBoxButtonAction:) forControlEvents: UIControlEventTouchUpInside];
...
// handler
- (void)checkBoxButtonAction:(UIButton *)aCheckBox
{
    self.isChecked = !self.isChecked;
    [aCheckBox setImage:[UIImage imageNamed:(self.isChecked ? @"Checked" : @"Unchecked")] forState:UIControlStateNormal];
    [theCheckboxButton setImage:[UIImage imageNamed:(self.isChecked ? @"Unchecked" : @"Checked")] forState:UIControlStateSelected];
}

编辑:

// images from not external resources
@property (strong) UIImage *checkedImage;
@property (strong) UIImage *uncheckedImage;
// bool property
@property (assign) BOOL isChecked;
...
// custom button
UIButton *theCheckboxButton = ;
[theCheckboxButton setImage:self.uncheckedImage forState:UIControlStateNormal];
[theCheckboxButton setImage:self.checkedImage forState:UIControlStateSelected];
[theCheckboxButton addTarget:self action:@selector(checkBoxButtonAction:) forControlEvents: UIControlEventTouchUpInside];
...
// handler
- (void)checkBoxButtonAction:(UIButton *)aCheckBox
{
    self.isChecked = !self.isChecked;
    [aCheckBox setImage:self.isChecked ? self.checkedImage : self.uncheckedImage] forState:UIControlStateNormal];
    [theCheckboxButton setImage:(self.isChecked ? self.uncheckedImage : self.checkedImage) forState:UIControlStateSelected];
}
于 2013-02-27T10:34:19.077 回答
0

好吧..您可以使用多种选择来做到这一点:
1.UIImageView在您的按钮上方添加并添加UITapGestureRecognizer到图像视图,方法是在第二次单击时将其删除。
2. 您还可以将按钮的背景颜色与完全适合您的按钮的图案图像一起使用(以避免重复)。
3.使用图层CGImageRef

于 2013-02-27T10:05:09.413 回答
0

您绝对应该使用 UIButton 提供的 API:setImage:forState:使用 UIControlStateSelected(单击一次按钮后应获得的状态)/ UIControlStateNormal。按钮可以是highlightedselected。突出显示的是当你推动它时,(一旦触摸停止就消失),第一次触摸后选择设置为“是”,第二次返回为“否”。

于 2013-02-27T10:05:21.653 回答