2009-12-02 31 views

Trả lời

59

CẬP NHẬT: Xem MANIAK_dobrii's answer để có giải pháp dễ dàng hơn, có sẵn trong iOS 7+.


Sau đây là cách tôi sử dụng hình ảnh cho một UIBarButtonItem:

UIImage *image = [UIImage imageNamed:@"buttonImage.png"]; 
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.bounds = CGRectMake(0, 0, image.size.width, image.size.height);  
[button setImage:image forState:UIControlStateNormal]; 
[button addTarget:myTarget action:@selector(myAction) forControlEvents:UIControlEventTouchUpInside];  
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
… 
+0

Nếu bạn muốn có một danh hiệu vào nút của bạn, bạn có thể muốn thay đổi dòng setImage để setBackgroundImage. Nếu không, thì mã trên chỉ hoạt động tốt. – rein

+0

cảm ơn rất nhiều người đàn ông – vodkhang

+3

Đừng quên 'button.showsTouchWhenHighlighted = YES' để nút phát sáng khi khai thác như một UIBarButtonItem tiêu chuẩn. – azdev

7

Nope. Như bạn có thể đọc trong Human Interface Guidelines

Sau khi bạn đã quyết định về sự xuất hiện của biểu tượng của bạn, hãy làm theo những hướng dẫn này khi bạn tạo nó:

Sử dụng định dạng PNG. Sử dụng màu trắng tinh khiết với alpha thích hợp. Không bao gồm bóng đổ. Sử dụng tính năng chống răng cưa. Nếu bạn quyết định thêm bevel, hãy chắc chắn rằng nó là 90 ° (để giúp bạn làm điều này, hãy tưởng tượng một nguồn ánh sáng được đặt ở phía trên cùng của biểu tượng). Đối với các biểu tượng trên thanh công cụ và thanh điều hướng, hãy tạo biểu tượng có kích thước khoảng 20 x 20 pixel. Đối với các biểu tượng trên thanh tab, hãy tạo biểu tượng có kích thước khoảng 30 x 30 pixel.

Lưu ý: Biểu tượng bạn cung cấp cho thanh công cụ, thanh điều hướng và thanh tab được sử dụng làm mặt nạ để tạo biểu tượng bạn thấy trong ứng dụng của mình. Không cần tạo biểu tượng đủ màu.

44

Có khác giải pháp iOS7 +:

NSString *iconFilename = // ... 
UIImage *image = 
    [[UIImage imageNamed:iconFilename] 
     imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
UIBarButtonItem *barButtonItem = 
    [[UIBarButtonItem alloc] initWithImage:image 
            style:UIBarButtonItemStylePlain 
            target:self 
            action:@selector(onBarButtonItemTapped:)]; 

Extract từ UIImage.h:

... thanh menu, thanh tab, thanh công cụ, và phân đoạn điều khiển tự động xử lý hình ảnh cận cảnh của họ như mẫu ... Bạn có thể sử dụng UIImageRenderingModeAlwaysTemplate để buộc hình ảnh của bạn luôn được hiển thị dưới dạng mẫu hoặc UIImageRenderingModeAlwaysOriginal để buộc hình ảnh của bạn luôn được hiển thị dưới dạng bản gốc.

+4

Đó phải là câu trả lời được chấp nhận. – Apfelsaft

+0

@Apfelsaft - có thể là, nếu iOS 7 tồn tại trong năm 2009, khi câu hỏi được hỏi :) Tôi đã chỉnh sửa câu trả lời được chấp nhận để liên kết với câu hỏi này. – ToolmakerSteve

21

Có một cách khác không liên quan đến mã hóa.

Trước tiên, đặt hình ảnh bạn muốn đặt lên thanh trên tài liệu Assets.xcassets.

Chọn hình ảnh trên trình duyệt nội dung.

Select the image

Mở Attributes thanh tra cho hình ảnh đó trên thanh công cụ dọc phải.

Attributes inspector

Trên "Render As" chọn "Original Image".

Original Image

Mặc dù trên các kịch bản các nút sẽ tiếp tục được sơn với màu sắc thái, khi chạy trên giả lập hình ảnh ban đầu sẽ được hiển thị.

Simulator

Chế độ mặc định vẽ cho một hình ảnh khác nhau từ một điều khiển giao diện người dùng cho bên kia. Tuy nhiên, nếu bạn đặt tham số này trên trình kiểm tra thuộc tính, bạn có thể buộc rằng hình ảnh sẽ luôn được thể hiện bằng một chế độ hiển thị cụ thể.

Nếu bạn cần cùng một hình ảnh được thể hiện bằng các chế độ hiển thị khác nhau trên các bộ điều khiển khác nhau, thì phản hồi từ MANIAK_dobrii phù hợp hơn.

+0

Câu trả lời hoàn hảo! –

+0

Cảm ơn bạn, đây là MUCH sạch hơn – ekscrypto

6

Trong Swift 3:

let iconname = // ... 
let image = UIImage(named: iconname)?.withRenderingMode(.alwaysOriginal) 
let barButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(self. onBarButtonItemTapped)) 
self.navigationItem.leftBarButtonItem = barButtonItem 
Các vấn đề liên quan