ios 在代码中为 UIButton 设置图像
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1469474/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Setting an image for a UIButton in code
提问by Spanky
How do you set the image for a UIButton in code?
你如何在代码中为 UIButton 设置图像?
I have this:
我有这个:
UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btnTwo.frame = CGRectMake(40, 140, 240, 30);
[btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal];
[btnTwo addTarget:self action:@selector(goToOne) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnTwo];
but don't see what will set the image for it.
但不知道什么会为它设置图像。
回答by Mike W
Objective-C
目标-C
UIImage *btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setImage:btnImage forState:UIControlStateNormal];
Swift 5.1
斯威夫特 5.1
let btnImage = UIImage(named: "image")
btnTwo.setImage(btnImage , for: .normal)
回答by leviathan
Mike's solution will just show the image, but any title set on the button will not be visible, because you can either set the title or the image.
Mike 的解决方案只会显示图像,但按钮上设置的任何标题都将不可见,因为您可以设置标题或图像。
If you want to set both (your image and title) use the following code:
如果您想同时设置(您的图片和标题),请使用以下代码:
btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setBackgroundImage:btnImage forState:UIControlStateNormal];
[btnTwo setTitle:@"Title" forState:UIControlStateNormal];
回答by jrasmusson
Before this would work for me I had to resize the button frame explicitly based on the image frame size.
在这对我有用之前,我必须根据图像框架大小明确调整按钮框架的大小。
UIImage *listImage = [UIImage imageNamed:@"list_icon.png"];
UIButton *listButton = [UIButton buttonWithType:UIButtonTypeCustom];
// get the image size and apply it to the button frame
CGRect listButtonFrame = listButton.frame;
listButtonFrame.size = listImage.size;
listButton.frame = listButtonFrame;
[listButton setImage:listImage forState:UIControlStateNormal];
[listButton addTarget:self.navigationController.parentViewController
action:@selector(revealToggle:)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *jobsButton =
[[UIBarButtonItem alloc] initWithCustomView:listButton];
self.navigationItem.leftBarButtonItem = jobsButton;
回答by Sruit A.Suk
In case of Swift User
如果是 Swift 用户
// case of normal image
let image1 = UIImage(named: "your_image_file_name_without_extension")!
button1.setImage(image1, forState: UIControlState.Normal)
// in case you don't want image to change when "clicked", you can leave code below
// case of when button is clicked
let image2 = UIImage(named: "image_clicked")!
button1.setImage(image2, forState: UIControlState.Highlight)
回答by Azhar
You can do it like this
你可以这样做
[btnTwo setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
回答by Gaurav Gilani
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 150, 44);
[btn setBackgroundImage:[UIImage imageNamed:@"buttonimage.png"]
forState:UIControlStateNormal];
[btn addTarget:self
action:@selector(btnSendComment_pressed:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
回答by Ajay Sharma
You can put the image in either of the way:
您可以采用以下任一方式放置图像:
UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btnTwo.frame = CGRectMake(40, 140, 240, 30);
[btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal];
[btnTwo addTarget:self
action:@selector(goToOne)
forControlEvents:UIControlEventTouchUpInside];
[btnTwo setImage:[UIImage imageNamed:@"name.png"] forState:UIControlStateNormal];
//OR setting as background image
[btnTwo setBackgroundImage:[UIImage imageNamed:@"name.png"]
forState:UIControlStateNormal];
[self.view addSubview:btnTwo];
回答by Alex Cio
I was looking for a solution to add an UIImage
to my UIButton
. The problem was just it displays the image bigger than needed. Just helped me with this:
我一直在寻找一种解决方案来UIImage
向我的UIButton
. 问题是它显示的图像比需要的大。刚刚帮我解决了这个问题:
_imageViewBackground = [[UIImageView alloc] initWithFrame:rectImageView];
_imageViewBackground.image = [UIImage imageNamed:@"gradientBackgroundPlain"];
[self addSubview:_imageViewBackground];
[self insertSubview:_imageViewBackground belowSubview:self.label];
_imageViewBackground.hidden = YES;
Every time I want to display my UIImageView
I just set the var hidden
to YES
or NO
.
There might be other solutions but I got confused so many times with this stuff and this solved it and I didn't need to deal with internal stuff UIButton
is doing in background.
每次我想显示我的时候,UIImageView
我只是将 var 设置hidden
为YES
or NO
。可能还有其他解决方案,但我对这些东西感到困惑很多次,这解决了它,我不需要处理UIButton
后台正在做的内部事情。
回答by Peter Schultz
Don't worry so much framing the button from code, you can do that on the storyboard. This worked for me, one line...more simple.
不要太担心从代码中构建按钮,您可以在故事板上完成。这对我有用,一行……更简单。
[self.button setBackgroundImage:[UIImage imageNamed: @"yourPic.png"] forState:UIControlStateNormal];
回答by Leemboy
-(void)buttonTouched:(id)sender
{
UIButton *btn = (UIButton *)sender;
if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-Locked.png"]])
{
[btn setImage:[UIImage imageNamed:@"icon-Unlocked.png"] forState:UIControlStateNormal];
// other statements....
}
else
{
[btn setImage:[UIImage imageNamed:@"icon-Locked.png"] forState:UIControlStateNormal];
// other statements....
}
}