2012-01-04 16 views
7

Khi tùy chỉnh sự xuất hiện của UIButton bằng cách sử dụng lớp proxy UIBarItems dường như ban đầu đưa vào các thuộc tính tùy chỉnh thiết lập cho UIButton.Tại sao - [[UIButton appearance] setBackgroundImage] ảnh hưởng đến sự xuất hiện ban đầu của các đối tượng UIBarItem và cách bạn sửa nó?

Bắt đầu với dự án Master/Detail mặc định bằng cách sử dụng Dữ liệu lõi. Tùy chỉnh giao diện của UIButton trong AppDelegate và chạy ứng dụng. Nhấp vào nút Chỉnh sửa, sau đó nhấp vào nút Xong trong thanh điều hướng cho MasterViewController và xem tùy chỉnh biến mất.

đang Tuỳ chỉnh xuất hiện trong [ứng dụng appdelegate: didFinishLaunchingWithOptions]:

UIImage *customBackground = [[UIImage imageNamed:@"yourcustomimage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5,5,5,5)]; 
[[UIButton appearance] setBackgroundImage:customBackground forState:UIControlStateNormal]; 

All UIBarButtonItems initialize with custom background.
Tất cả UIBarButtonItems khởi với nền tùy chỉnh

When the Edit button is replaced by the Done button, it correctly does not have the customized background.
Khi nút Edit được thay thế bằng Done nút, nó chính xác không có nền tùy chỉnh.

A similar question asks how to customize the Done button. Tôi lo ngại tại sao điều này đang xảy ra ở tất cả các đối tượng UIBarItem, mà không kế thừa từ UIButton, và muốn biết cách sửa nó.

Tôi nghi ngờ sự kế thừa proxy và thuộc tính được hỗ trợ, nhưng tôi không biết cách sửa nó. Bất kỳ đề xuất?

+1

Tôi chạy vào cùng một vấn đề và đã không tìm thấy một giải pháp tuyệt vời được nêu ra. Tôi hiện đang sử dụng '[UIButton appearanceWhenContainedIn:' để sửa lỗi này. Tôi không thực sự hạnh phúc về điều này vì vậy tôi rất thích nghe nếu ai đó có một giải pháp tốt hơn. – Christine

Trả lời

1

Đề nghị của tôi sẽ được thiết lập lại backgroundImage để nil khi chứa trong UINavigationBar:

[[UIButton appearance] setBackgroundImage:customBackground forState:UIControlStateNormal]; 
[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundImage:nil forState:UIControlStateNormal]; 
Các vấn đề liên quan