Đặt hình ảnh cho UIButton trong mã


196

Làm thế nào để bạn thiết lập hình ảnh cho một UIButton trong mã?

Tôi có cái này:

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

nhưng không thấy những gì sẽ thiết lập hình ảnh cho nó.

Câu trả lời:


399

Mục tiêu-C

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

Swift 5.1

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

1
Là một sidenote: điều này sẽ hiển thị hình ảnh, nhưng văn bản tiêu đề nút sẽ bị ẩn.
leviathan

Đây là mã hoàn toàn hoạt động nhưng tôi đang nhận được hình ảnh với phân tích cú pháp vì vậy làm thế nào tôi có thể làm điều này vì mã này hoạt động với tôi trong trường hợp UIImage: - LargePick.image = aNewsInfo.smallImageData; Làm thế nào tôi có thể làm điều này với UIButton ... Bạn có thể giúp tôi ...
user755278

1
@slcott, tài liệu nêu ở đâu? Tôi không thấy nó gợi ý bất cứ nơi nào setImagebị phản đối. (Có vẻ với tôi bạn đang bối rối UIButton.setImagevới UITableViewCell.image, mà một tài sản bị phản đối như bạn đã nêu.)
Kirk Woll

12
Chú ý: Nếu bạn sử dụng bất cứ thứ gì khác ngoài UIButtonTypeCustom, hình ảnh sẽ có màu xanh lam trong iOS7 và 8.
Apfelsaft

2
Đối với Swift 3: btnTwo.setImage (btnImage, for: UIControlState.n normal)
Micah Montoya

57

Giải pháp của Mike sẽ chỉ hiển thị hình ảnh, nhưng bất kỳ tiêu đề nào được đặt trên nút sẽ không hiển thị, bởi vì bạn có thể đặt tiêu đề hoặc hình ảnh.

Nếu bạn muốn đặt cả (hình ảnh và tiêu đề của bạn), hãy sử dụng mã sau:

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

2
sự khác biệt giữa setImagesetBackgroundImage là gì?
onmyway133

3
setBackgroundImage sẽ kéo dài hình ảnh theo chiều rộng của nút trên văn bản tiêu đề của bạn trong khi setImage sẽ làm cho nút trở thành một hình ảnh bỏ qua văn bản tiêu đề mà không kéo dài hình ảnh.
Ernest

21

Trước khi nó hoạt động với tôi, tôi phải thay đổi kích thước khung nút một cách rõ ràng dựa trên kích thước khung hình.

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 chỉ muốn thêm rằng 3 dòng nghịch với khung cũng có thể được viết bằng[listButton sizeToFit]
bk138

10

Trong trường hợp người dùng 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

Bạn có thể làm như thế này

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

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

Bạn có thể đặt hình ảnh theo một trong hai cách:

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

Phần này của mã đã làm tôi bối rối. <code> btnImage = [UIImage image Named: @ "image.png"]; </ code> btnImage là gì? Đó không phải là trong mã gốc. Có phải đó là một nút mới?
Mike Martin

bạn có thể trực tiếp đặt hình ảnh của nút thay vì lấy một đối tượng hình ảnh khác như thế này: [btnTwo setImage: [UIImage imageNamed: @ "image.png"]];
Ajay Sharma

bạn phải có nútWithType: UIButtonTypeRoundedRect to UIButtonTypeCustom nút thông minh khác sẽ không hiển thị theo như hình ảnh của bạn.
Praveen-K

2

Tôi đang tìm kiếm một giải pháp để thêm UIImagevào UIButton. Vấn đề chỉ là nó hiển thị hình ảnh lớn hơn mức cần thiết. Chỉ giúp tôi với điều này:

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

Mỗi lần tôi muốn hiển thị, tôi UIImageViewchỉ cần đặt var hiddenthành YEShoặc NO. Có thể có các giải pháp khác nhưng tôi đã nhầm lẫn rất nhiều lần với công cụ này và điều này đã giải quyết nó và tôi không cần phải xử lý nội dung UIButtonđang làm trong nền.


2

Đừng lo lắng quá nhiều việc đóng khung nút từ mã, bạn có thể làm điều đó trên bảng phân cảnh. Điều này làm việc cho tôi, một dòng ... đơn giản hơn.

[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 phiên bản (butt_img phải là một Set Hình ảnh thành Assets.xcassets hoặc Images.xcassets thư mục trong Xcode):

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

Dù sao, nếu bạn muốn hình ảnh được thu nhỏ để lấp đầy kích thước của nút, bạn có thể thêm UIImageViewvào nó và gán cho hình ảnh của bạn:

let img = UIImageView()
img.frame = btnTwo.frame
img.contentMode = .scaleAspectFill
img.clipsToBounds = true
img.image = UIImage(named: "butt_img")
btnTwo.addSubview(img)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.