Đặt kết quả hình ảnh UIButton bằng nút màu xanh trong iOS 7


163

Trên SDK iOS 6 tôi đã viết các dòng mã sau để hiển thị hình ảnh bên trong một nút:

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];

Nhưng bây giờ với Xcode 5 và iOS 7, nó không hoạt động. Nút không chứa hình ảnh. Nút được lấp đầy với màu xanh.


Hình ảnh hiển thị khi bạn nhấp vào nút?
JustAntherCoder

Câu trả lời:


378

Trong iOS7 có loại nút mới gọi là UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // nút hệ thống tiêu chuẩn

Kiểm tra tệp .xib của bạn và thay đổi loại nút thành Tùy chỉnh Nhìn vào hình ảnh

Để thực hiện việc này theo chương trình, hãy thêm dòng này vào viewDidLoad:

[UIButton buttonWithType:UIButtonTypeSystem]; 

2
[Nút UIButtonWithType: UIButtonTypeSystem];
vô tư

57
Lưu ý rằng giải pháp này không loại bỏ màu sắc hệ thống, nhưng cũng dẫn đến sự chuyển đổi cứng giữa trạng thái được tô sáng và trạng thái bình thường. Nếu bạn đang tìm cách duy trì hành vi hệ thống, hình động, v.v., nhưng muốn loại bỏ màu sắc, hãy thử [myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];(với loại nút được đặt thành "Hệ thống" trong IB).
JWK

Cảm ơn điều này rất hữu ích. Trong trường hợp của chúng tôi, nút thậm chí đã được cắt thành hình dạng của PNG trong suốt và sau đó tô màu.
g_pass

Geezm họ đã giấu rằng một trong những không phải họ?!
Maury Markowitz

nó hoạt động :) bạn có thể có một số vấn đề khác trong mã ur. Nếu bạn nhìn vào Xcode 6.1, bạn có thể thấy rõ các tùy chọn khả dụng ..
Chamira Fernando

53

Có vẻ như iOS 7 đang sử dụng hình ảnh được cung cấp giống như mặt nạ Alpha để hiển thị màu sắc của nút. Thay đổi loại nút để UIButtonTypeCustomthực hiện thủ thuật cho tôi (cảm ơn người dùng716216!). Đặt hình ảnh làm nền không phải lúc nào cũng hoạt động nếu bạn đã có hình nền, như trường hợp của tôi.


Cảm ơn bạn! Người dùng ban đầu quên chấp nhận nó là câu trả lời.
jigzat

nó hoạt động với tôi, nhưng thay đổi hệ thống không hoạt động cho trường hợp của tôi, cảm ơn tất cả sự đóng góp của bạn
chings228

29

Swift 3, 4, 5:

let image = UIImage(named: "my-image")
myButton.setImage(image.withRenderingMode(.alwaysOriginal), for: .normal)

24

Có một cơ hội tốt rằng hình ảnh ở đó và bạn không thể nhìn thấy nó. Hãy thử thay đổi loại nút thành UIButtonTypeCustom. Nếu không được, hãy đặt màu nền của nút thành[UIColor clearColor];


9

Vấn đề là tông màu. Theo mặc định, iOS ném màu xanh lam trên mỗi nút. Bạn có thể đi xung quanh nó thông qua 3 cách.

  1. Thay đổi màu sắc. [button setTintColor:[UIColor blackColor]]; Điều này có thể tô màu hình ảnh của bạn theo cách bạn không muốn nó.

  2. Như hầu hết các đề xuất khác, đặt hình nền. [button setBackgroundImage:[UIImage...]];

  3. Thêm một UIImageView vào nút của bạn.

UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];

[button addSubView:img];


9

Đối với nhanh chóng:

    let aButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton

6

Tôi gặp vấn đề tương tự. Trên bảng phân cảnh của tôi, tôi có một nút mà không có bất kỳ hình ảnh.

Sau đó tôi sẽ chỉ định hình ảnh trong mã.

IOS 7 đã đến và tôi nhận được rất nhiều hình ảnh màu xanh.

Độ phân giải rất đơn giản nhưng khó hiểu. Nếu tôi chỉ định bất kỳ hình ảnh nào trên bảng phân cảnh và sau đó thay đổi hình ảnh trong thời gian chạy thì nó hoạt động tốt.

Bạn luôn phải chỉ định một hình ảnh bắt đầu trên bảng phân cảnh ngay cả khi bạn sẽ không sử dụng nó.


3

Điều này làm việc cho tôi

[myButton1 setBackgroundImage:[UIImage imageNamed:@"phones.png"] forState:UIControlStateNormal];

Lưu ý: Xóa hình ảnh phía trước trước khi làm điều này.


làm thế nào để loại bỏ hình nền xin vui lòng !!
simbesi.com

3

Chủ đề cũ, nhưng tôi muốn kêu vang vì tôi chỉ có cùng một vấn đề. Vấn đề chỉ là bạn đang gọi setImage khi bạn nên gọi setBackgroundImage.


1

Không có giải pháp nào được đưa ra làm việc cho tôi. Nếu bạn không đặt hình ảnh ban đầu trong Storyboard, bạn vẫn có thể thay đổi hình ảnh của nút bằng cách sử dụng setBackgroundImage.

Ví dụ của bạn, chỉ cần một thay đổi nhỏ.

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setBackgroundImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];

1

Vấn đề này được gọi là vấn đề màu xanh của nút trong xcode. Khi chúng tôi tạo nút theo mã, nút hiển thị màu xanh lam theo mặc định. Điều này có thể được giải quyết bằng cách gán màu sắc cho màu đen hoặc trắng tương ứng với màu của ô của bạn. Mã này là:

UIImage *closebtnimg = [UIImage imageNamed:@"icon_uncheck.png"];
 UIImage *closebtnimg1 = [UIImage imageNamed:@"icon_checked.png"];

Custombutton *button = [Custombutton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(52, 66, 25, 24)];
[button setBackgroundImage:closebtnimg forState:UIControlStateNormal];
[button setBackgroundImage:closebtnimg1 forState:UIControlStateSelected];
[button setTintColor:[UIColor whiteColor]];
[cell.contentView addSubview:button];
[button addTarget:self action:@selector(changeImage:)  forControlEvents:UIControlEventTouchUpInside];

nó khá hữu ích @Shane
Rudra

1

Sử dụng Xcode 9.2, không có giải pháp nào ở trên hoạt động cho những gì tôi đang tìm kiếm.

Tôi đang tìm kiếm một giải pháp cho phép tôi thiết lập .normal.selected UIControlStatehình ảnh bên trong bảng phân cảnh cho chế độ kết xuất ban đầu của chúng , nhưng, bên trong tệp Swift, không có chuỗi ký tự nào tồn tại liên quan đến tên hình ảnh.

Về cơ bản, bên trong mã của bạn, bạn sẽ nhận được hình ảnh bạn đặt bên trong bảng phân cảnh của mình cho .normaltrạng thái và hiển thị lại dưới dạng .alwaysOriginal(Tương tự cho .selectedtrạng thái), sau đó, bạn sẽ đặt hình ảnh đó (hiện được hiển thị là bản gốc và sẽ không bị ảnh hưởng bởi sắc thái) cho trạng thái có liên quan ( .normal.selected) của bạn UIButton.

Đây là:

// Get your .normal image (you set via your storyboard) and render it as original
let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal)
// Set your normal image but this time rendered as original
yourButton.setImage(unselectedImage, for: .normal)
// Same for selected state
let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(selectedImage, for: .selected)

Bằng cách này, bạn có thể đặt trạng thái hình ảnh nút của mình và nếu tên hình ảnh sẽ thay đổi, nó sẽ không ảnh hưởng đến mã của bạn.


1

Trong iOS 13 - chỉ cần đặt thuộc tính Tint thành Trắng, trong khi vẫn giữ loại UIButton là Tùy chỉnh


0

làm cho màu sắc như màu rõ ràng cho tất cả bốn trạng thái (Mặc định, Nổi bật, được chọn, bị tắt) làm việc cho tôi.


-1

Trong Swift 4 , khởi tạo UIButtonvà gán dữ liệu hình ảnh uyour như sau:

let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)
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.