UIButton背景VS UIButton图片视图。

4
UIButton的背景与UIImageView.view有何区别?
我尝试过使用 myButton.imageView.image=[UIImage imageNamed:@"image.png"];,但什么都没有发生。但是,当我使用 [myButton setBackgroundImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal]; 时,按钮的背景发生了变化。
谢谢!
4个回答

4

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

//编辑

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

setImage:(UIImage *) forState:(UIControlState)

因此,使用上述方法是有效的,而其他方法则不行。

1
如果它是只读属性,那么它会报错。 - Prashant Bhayani

2
[myButton setBackgroundImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[myButton setBackgroundImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateHighlighted];

每当调用当前ImageView时,它将返回所选状态的背景图像。 不同的状态会被突出显示/选择/禁用。

实际上,我尝试了你说的方法,看起来很合理,但是它并没有给我“选定状态背景图像”,你试过吗? - Alaa Eldin

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:

1
@Tough Guy 是正确的 - UIButton 有一个只读属性用于其 imageView。因此,您无法通过访问 imageView 的 image 直接设置图像。
@property(nonatomic,readonly,retain) UIImageView *imageView   __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

使用方便的方法。
[UIButtonInstance setImage:imageName forState:buttonState];

8
imageView 是只读的,这意味着您无法更改按钮的 imageView。但是 imageView 的 image 属性不是只读的,因此您可以轻松设置 imageView 的图像。 - Matthias Bauch
@MatthiasBauch 由于ImageView是只读属性,您无法为UIButton分配或分配imageView。 只有在[UIButtonInstance setImage:imageName forState:buttonState]期间,UIButton才会分配UIImageView。 因此,您永远无法将图像分配给UIButtonInstance.imageView。 - Dhilip
@Dhilip,事实上这并不正确。ImageView是只读的,但正如Matthias Bauch所说,它的图像属性不是只读的,因此可以通过使用UIButtonInstance.imageView.image或甚至[UIButtonInstance.imageView setImage:image];来更改它。 - bmeulmeester

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接