2011-06-08 28 views
27

Tải xuống IOS5 SDK ngày hôm qua và mã này mà tôi sử dụng để đặt nền của UIToolbar thành hình ảnh tùy chỉnh ngừng hoạt động. Nếu tôi đặt mục tiêu cho IOS4.3 và dưới nó vẫn hoạt động.Hình nền tùy chỉnh trên UIToolbar trong SDK IOS5

[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0]; 

Bất kỳ ai gặp phải điều này trên iOS 5?

+2

iOS5 là theo NDA vì vậy tôi nghĩ bạn có thể thảo luận về nó trên các diễn đàn dành riêng cho táo của chỉ – Vladimir

Trả lời

49

Bạn có thể sử dụng: [[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault]; (mới trong iOS 5)

+0

Điều này thật tuyệt vời, vì nó gọn gàng đặt nền cho * tất cả * thanh điều hướng của bạn, bạn không cần phải làm điều đó cho mỗi thanh. Cám ơn đã chỉ tôi hướng đi đúng. – Chris

+0

Bất kỳ tương đương nào cho UIToolbar? – Chris

+59

[[UIToolbar appearance] setBackgroundImage: barsQuay lại choToolbarPosition: UIToolbarPositionBất kỳ thanhMetrics: UIBarMetricsDefault] – Chris

3

Phương pháp này không được ghi lại và dựa vào cấu trúc phụ đề cụ thể của UIToolbar có thể được thay đổi từ phiên bản này sang phiên bản khác. Vì vậy, đó chính xác những gì có thể đã xảy ra với bản phát hành iOS5

P.S. Nếu bạn kiểm tra cập nhật UIToolBar class tham khảo bạn sẽ tìm thấy một cách khác để tùy chỉnh UIToolBar

+0

Validmir cảm ơn cho con trỏ. Tôi sẽ kiểm tra tài liệu. Tôi đã thử điều này bây giờ và nó hoạt động trên tất cả các phiên bản IOS. @interface WoodenToolbar: UIToolbar {} - (void) drawRect: (CGRect) rect; @end @thực hiện WoodenToolbar - (void) drawRect: (CGRect) rect { UIImage * image = [UIImage imageNamed: @ "navbar-iphone.png"]; [image drawInRect: CGRectMake (0, 0, self.frame.size.width, self.frame.size.height)]; } @end – StackThis

35

Giả sử bạn liên kết iOS5 beta SDK, bạn có thể làm một cái gì đó như thế này

if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     //iOS 5 new UINavigationBar custom background 
     [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault]; 
} 

Để nhận ra điều này, hãy nhìn vào đây iOS 4.3 to iOS 5.0 API Differences và tìm kiếm cho "UINavigationBar.h"

hoặc tham gia một cái nhìn cận cảnh các phương pháp chữ ký mới đây setBackgroundImage:forBarMetrics:

Ngoài ra ở đây là UIBarMetrics loại enum

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn rất nhiều!Điều này làm việc hoàn hảo – shabbirv

10

này làm việc trên thanh công cụ của tôi:

//toolBar background image set based on iOS version 
    [[UIDevice currentDevice] systemVersion]; 

    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) { 

     //iOS 5 
     UIImage *toolBarIMG = [UIImage imageNamed: @"toolBar_brown.png"]; 

     if ([toolBar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) { 
      [toolBar setBackgroundImage:toolBarIMG forToolbarPosition:0 barMetrics:0]; 
     } 

    } else { 

     //iOS 4 
     [toolBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolBar_brown.png"]] autorelease] atIndex:0]; 

    } 
+6

Không cần phải kiểm tra phiên bản hệ thống (và điều này thường không phải là một thực hành tốt), bởi vì kiểm tra '-respondsToSelector' là đủ để xác định xem có nên sử dụng cách mới hay cách cũ để làm điều này. –

+0

ios5 hoạt động tốt nhưng ios 4 không phản hồi. tôi nên làm gì? – Hiren

0

Đây là dọc theo dòng giống như câu trả lời Simone, nhưng làm việc cho iOS 5 và iOS < 5. Đây là những gì tôi đang sử dụng trong ứng dụng. Bạn cần gọi số [UINavigationBar setupIos5PlusNavBarImage] ở đâu đó trong quá trình khởi tạo ứng dụng của bạn (applicationDidFinishLaunching: là một ứng cử viên tốt). Trên iOS 5+, setupIos5PlusNavBarImage sẽ sử dụng giao thức UIAppearance mới để đặt nền và ghi đè drawRect sẽ bị bỏ qua. Trên iOS < 5, setupIos5PlusNavBarImage về cơ bản sẽ là một no-op và drawRect sẽ xử lý việc vẽ hình ảnh.

Interface:

@interface UINavigationBar (CustomNavigationBar) 

+ (void) setupIos5PlusNavBarImage; 

- (void) drawRect: (CGRect) rect; 

@end 

Thực hiện:

@implementation UINavigationBar (CustomNavigationBar) 

+ (void) setupIos5PlusNavBarImage 
{ 
    if ([UINavigationBar respondsToSelector: @selector(appearance)]) 
    { 
     [[UINavigationBar appearance] setBackgroundImage: [UIImage imageNamed: @"menuBar.png"] forBarMetrics: UIBarMetricsDefault]; 
    } 
} 

- (void) drawRect: (CGRect) rect 
{ 
    UIImage* img = [UIImage imageNamed: @"menuBar.png"]; 
    [img drawInRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 

@end 
Các vấn đề liên quan