การตั้งค่าภาพสำหรับ UIButton ในรหัส


197

คุณจะตั้งค่าภาพสำหรับรหัส UIB ได้อย่างไร?

ฉันมีสิ่งนี้:

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

แต่ไม่เห็นสิ่งที่จะตั้งค่าภาพสำหรับมัน

คำตอบ:


401

Objective-C

UIImage *btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setImage:btnImage forState:UIControlStateNormal];

สวิฟท์ 5.1

let btnImage = UIImage(named: "image")
btnTwo.setImage(btnImage , for: .normal)

1
ในฐานะที่เป็น sidenote: สิ่งนี้จะแสดงภาพ แต่ข้อความชื่อปุ่มจะถูกซ่อน
leviathan

รหัสนี้ใช้งานได้อย่างสมบูรณ์ แต่ฉันได้ภาพพร้อมการแยกวิเคราะห์ดังนั้นฉันจะทำสิ่งนี้ได้อย่างไรเนื่องจากรหัสนี้ใช้ได้กับฉันในกรณี UIImage: - largePick.image = aNewsInfo.smallImageData; ฉันจะทำสิ่งนี้กับ UIButton ได้อย่างไร ... คุณช่วยฉันได้ไหม ...
user755278

1
@slcott เอกสารระบุว่าอยู่ที่ไหน ฉันไม่เห็นว่าจะแนะนำที่ใดก็ตามที่setImageเลิกใช้แล้ว (ปรากฏให้ฉันคุณกำลังสับสนUIButton.setImageกับUITableViewCell.imageซึ่งเป็นสถานที่ให้เลิกตามที่คุณกล่าว.)
เคิร์ก Woll

12
ข้อควรสนใจ: หากคุณใช้สิ่งอื่นนอกเหนือจาก UIButtonTypeCustom รูปภาพจะเป็นสีน้ำเงินใน iOS7 และ 8
Apfelsaft

2
สำหรับ Swift 3: btnTwo.setImage (btnImage สำหรับ: UIControlState.normal)
มิคาห์มอนโตยา

57

คำตอบของไมค์จะแสดงเฉพาะภาพ แต่ชื่อเรื่องที่ตั้งอยู่บนปุ่มนั้นจะมองไม่เห็นเพราะคุณสามารถตั้งชื่อหรือภาพได้

หากคุณต้องการตั้งค่าทั้งสอง (ภาพและชื่อของคุณ) ใช้รหัสต่อไปนี้:

btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setBackgroundImage:btnImage forState:UIControlStateNormal];
[btnTwo setTitle:@"Title" forState:UIControlStateNormal];

2
ความแตกต่างระหว่างsetImageและsetBackgroundImageคืออะไร?
onmyway133

3
setBackgroundImage จะขยายภาพไปตามความกว้างของปุ่มเหนือข้อความหัวเรื่องของคุณในขณะที่ setImage จะทำให้ปุ่มเป็นรูปภาพโดยไม่สนใจข้อความชื่อโดยไม่ขยายภาพ
เออร์เนสต์

21

ก่อนหน้านี้จะใช้งานได้สำหรับฉันฉันต้องปรับขนาดกรอบปุ่มตามขนาดเฟรมรูปภาพอย่างชัดเจน

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;

@jrasmusson เพียงแค่ต้องการเพิ่มว่า 3 บรรทัดของซอเล่นกับเฟรมยังสามารถเขียนใน[listButton sizeToFit]
bk138

10

ในกรณีที่ผู้ใช้ 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) 


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

8

คุณสามารถใส่ภาพในวิธีใดวิธีหนึ่ง:

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

ส่วนนี้ของรหัสทำให้ฉันสับสน <code> btnImage = [UIImage imageNamed: @ "image.png"]; </code> btnImage คืออะไร ไม่ได้อยู่ในรหัสต้นฉบับ นั่นคือปุ่มใหม่หรือไม่?
Mike Martin

คุณสามารถตั้งค่าภาพของปุ่มโดยตรงแทนที่จะถ่ายวัตถุรูปอื่นเช่นนี้: [btnTwo setImage: [UIImage imageNamed: @ "image.png"]];
Ajay Sharma

คุณต้องมี buttonWithType: UIButtonTypeRoundedRect to UIButtonTypeCustom ปุ่มฉลาดอื่น ๆ จะไม่แสดงตามรูปภาพของคุณ
Praveen-K

2

ผมกำลังมองหาวิธีการแก้ปัญหาการเพิ่มของฉันUIImage UIButtonปัญหาคือมันแสดงภาพที่ใหญ่กว่าที่ต้องการ เพิ่งช่วยฉันด้วยสิ่งนี้:

_imageViewBackground = [[UIImageView alloc] initWithFrame:rectImageView];
_imageViewBackground.image = [UIImage imageNamed:@"gradientBackgroundPlain"];
[self addSubview:_imageViewBackground];
[self insertSubview:_imageViewBackground belowSubview:self.label];
_imageViewBackground.hidden = YES;

เวลาที่ฉันต้องการแสดงของฉันทุกUIImageViewฉันเพียงแค่ตั้งวาhiddenไปหรือYES NOอาจมีวิธีแก้ไขปัญหาอื่น ๆ แต่ฉันสับสนหลายครั้งกับสิ่งนี้และสิ่งนี้แก้ไขได้และฉันไม่จำเป็นต้องจัดการกับสิ่งที่UIButtonอยู่ภายในกำลังทำอยู่เบื้องหลัง


2

ไม่ต้องกังวลกับการวางกรอบปุ่มจากโค้ดมากนักคุณสามารถทำได้บนกระดานเรื่องราว มันใช้งานได้สำหรับฉันบรรทัดเดียว ... เรียบง่ายขึ้น

[self.button setBackgroundImage:[UIImage imageNamed: @"yourPic.png"] forState:UIControlStateNormal];

2
-(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....
    }
}

2

Swift 3 version (butt_img ต้องเป็นรูปที่กำหนดไว้ในAssets.xcassetsหรือโฟลเดอร์Images.xcassetsใน Xcode):

btnTwo.setBackgroundImage(UIImage(named: "butt_img"), for: .normal)
btnTwo.setTitle("My title", for: .normal)

อย่างไรก็ตามหากคุณต้องการให้ภาพถูกปรับขนาดให้พอดีกับขนาดของปุ่มคุณสามารถเพิ่มภาพUIImageViewนั้นและกำหนดภาพของคุณได้:

let img = UIImageView()
img.frame = btnTwo.frame
img.contentMode = .scaleAspectFill
img.clipsToBounds = true
img.image = UIImage(named: "butt_img")
btnTwo.addSubview(img)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.