在UIButton上添加图像?

时间:2013-02-27 09:55:51

标签: objective-c

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

列表的某种复选标记。

修改

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

  1. 我应该将其作为另一个UIButton添加到之前的吗?
  2. 我应该把它作为UIImage放在它上面 - UIButton仍然可以接触到吗?
  3. 最好的方法是什么? Thnank。

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

3 个答案:

答案 0 :(得分:0)

嗯..你可以用多种选择来做到这一点:
1.在按钮上方添加UIImageView,然后将UITapGestureRecognizer添加到图片视图,方法是在第二次点击时将其删除。
2.您也可以使用按钮的backgroundColor,其图案图像与您的按钮完全吻合(以避免重复) 3.使用CGImageRef

的图层

答案 1 :(得分:0)

你绝对应该使用UIButton提供的API:setImage:forState:和UIControlStateSelected(一旦你点击它就按钮应该得到的状态)/ UIControlStateNormal。 按钮可以是highlightedselected。突出显示的是当你按下它时(一旦触摸停止就消失),而选择在第一次触摸后设置为YES,在第二次触摸时设置为NO。

答案 2 :(得分:0)

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

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

示例我如何看待代码(您可以通过另一种方式看到它):

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