Tôi có một số thuộc tính xuất hiện tùy chỉnh trong lớp chế độ xem của tôi (con cháu của UIView
). Tôi muốn tùy chỉnh sự xuất hiện quan điểm theo các đặc tính này, nhưng tôi không thể làm điều đó bên trong initializer, vì các giá trị thiết lập sử dụng [[MyClass appearance] setFoo:…]
không có hiệu lực tại thời điểm đó:Khi nào tôi có thể bắt đầu sử dụng các thuộc tính được đặt bằng UIAppearance?
@interface View : UIView
@property(strong) UIColor *someColor UI_APPEARANCE_SELECTOR;
@end
@implementation View
@synthesize someColor;
// Somewhere in other code before the initializer is called:
// [[View appearance] setSomeColor:[UIColor blackColor]];
- (id) initWithFrame: (CGRect) frame
{
self = [super initWithFrame:frame];
NSLog(@"%@", someColor); // nil
return self;
}
@end
Họ đã thiết lập trong layoutSubviews
, nhưng đó không phải là điểm tốt để thực hiện các tùy chỉnh chế độ xem, vì một số tùy chỉnh có thể kích hoạt lại layoutSubviews
, dẫn đến vòng lặp vô tận.
Vì vậy, điểm tốt để thực hiện các tùy chỉnh là gì? Hoặc có cách nào để kích hoạt mã áp dụng các giá trị xuất hiện không?
Tôi nghĩ rằng khi lớp tùy chỉnh được phân bổ, các thuộc tính của thành viên luôn có thể được truy cập và thay đổi theo yêu cầu và sau đó đối tượng có thể được sử dụng với thông tin đã sửa đổi trong mã. –
Để chắc chắn, tôi đang nói về các thuộc tính được thiết lập thông qua proxy xuất hiện ('UIAppearance'). Các giá trị này được đặt ở đâu đó muộn hơn trong bộ khởi tạo. Nếu tôi đặt một điểm ngắt trên trình thiết lập thuộc tính, tôi có thể thấy rằng các giá trị được áp dụng từ '[CALayer layoutSublayers]'. – zoul