UIButton 背景 VS UIButton imageview.view

Posted

技术标签:

【中文标题】UIButton 背景 VS UIButton imageview.view【英文标题】:UIButton background VS UIButton imageview.view 【发布时间】:2012-02-02 12:28:30 【问题描述】:

UIButton 背景和 UIButton imageview.view 有什么区别 我试过myButton.imageView.image=[UIImage imageNamed:@"image.png"]; 然后什么也没发生,但是当我使用[myButton setBackgroundImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal]; 按钮的背景发生变化。

谢谢!

【问题讨论】:

【参考方案1】:

myButton.imageView.image 是只读属性,因此不能像这样更改。而 setBackgroundImage 是一个正确设置背景的方法。

//编辑

UIButton 的 setImage 方法需要两个参数,

setImage:(UIImage *) forState:(UIControlState)

因此使用上述方法可以正常工作,而其他方法则不行。

【讨论】:

@Tough Guy 如果它是只读属性,那么它会报错。【参考方案2】:

UIButtonimageView 不表示背景图像。标题旁边显示的是图像视图。 因此,如有必要,将始终创建 imageView。如果在创建之前设置了yourButton.imageView.image,则没有任何内容可以显示,因为imageView 为nil。

所以 UIButton 有状态 (UIControlState) 来控制、创建或删除背景图像视图和 imageView 在状态之间变化时。 (也是标题)

请查看UIButton 的文档:http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html

您将看到两种不同的图像处理方法

– setBackgroundImage:forState:
– setImage:forState:

【讨论】:

【参考方案3】:
[myButton setBackgroundImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[myButton setBackgroundImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateHighlighted];

当你调用当前的ImageView时,它会返回选中状态的背景图片

不同的统计数据被突出显示/选择/禁用

【讨论】:

其实你说的我试过了,看起来合乎逻辑,但是它并没有给我“选中状态背景图”,你试过了吗?【参考方案4】:

@Tough Guy 是正确的 - UIButton 的 imageView 具有只读属性。所以不能直接通过访问imageView的图片来设置图片。

@property(nonatomic,readonly,retain) UIImageView *imageView   __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

使用方便的方法

[UIButtonInstance setImage:imageName forState:buttonState];

【讨论】:

imageView 是只读的。这意味着您不能更改按钮的 imageView。但是imageView的image属性不是只读的,所以可以设置imageView的图片没有任何问题。 @MatthiasBauch 由于 ImageView 是只读属性,因此您不能为 UIButton 分配或分配 imageView。 [UIButtonInstance setImage:imageName forState:buttonState]期间只有UIButton分配UIImageView;所以你永远不能将图像分配给 UIButtonInstance.imageView @Dhilip,这实际上不是真的。 ImageView 是只读的,但就像 Matthias Bauch 所说,它的图像属性是 not,因此可以通过使用 UIButtonInstance.imageView.image 甚至 [UIButtonInstance.imageView setImage:image]; 来更改。

以上是关于UIButton 背景 VS UIButton imageview.view的主要内容,如果未能解决你的问题,请参考以下文章

动画 UIButton 背景图像

如何更改 UIButton 的背景颜色?

拖动时在 UIButton 上填充背景颜色

UIButton UILabel 背景视图不采用传递的背景颜色

已知如何用标签值更改 UIButton 背景图像?

我可以为几个 UIButton 创建一个彩色背景吗?