Tôi có một số nút màu vàng được tạo bằng Trình tạo mã thông báo. Tất cả đều có cùng màu. Hiện tại tôi khai báo màu sắc trong mỗi xib. Tôi có thể tuyên bố nó trên toàn cầu và tái sử dụng trên tất cả các xib?Tôi có thể sử dụng lại màu sắc trong Trình tạo giao diện không?
Trả lời
Chắc chắn nhất!
Tạo một đối tượng singleton (bạn có thể gọi nó là OksanaColor
, để được mát mẻ) ...
... hoặc, nếu bạn thực sự lười biếng, một chỉ đọc UIColor
tài sản mà bạn có thể truy cập từ của bạn ủy nhiệm ứng dụng.
Bạn cũng có thể thêm danh mục trên UIColor, vì vậy bạn có thể sử dụng nó giống như khi bạn sử dụng UIColor. Ví dụ trong ứng dụng của tôi, tôi thêm một tệp mới có tên là ApplicationColors chứa tất cả các màu ứng dụng của tôi.
@interface UIColor (ApplicationColours)
+(UIColor *)savaColor;
@end
Thực hiện:
@implementation UIColor (ApplicationColours)
+(UIColor *)savaColor
{
return [UIColor colorWithRed:228.0f/255.0f green:86.0f/255.0f blue:86.0f/255.0f alpha:1.0f];
}
@end
Sau đó, để sử dụng nó trong ứng dụng của tôi, tôi nhập ApplicationColours.h và sử dụng giống như bất kỳ UIColor khác. tức là:
label.textColor = [UIColor savaColor];
Bạn có thể muốn tạo + savaColor giữ một biến tĩnh cho màu đó, để nó không tạo ra một cá thể mới mỗi lần. – NSResponder
Có suy nghĩ tốt @NSResponder không bao giờ nghĩ về điều đó :) –
Tôi không muốn làm điều đó trong mã. Tôi muốn đặt bên trong trình tạo giao diện. – Oksana
Đây là cách triển khai rất đơn giản của danh mục màu được đặt tên cho UIColor
. Với mã này trong dự án của bạn, UIColor
sẽ nhớ bất cứ màu gì bạn muốn tiết kiệm, và sẽ cho phép bạn truy cập vào màu sắc hoặc màu sắc hệ thống của riêng bạn sử dụng +colorWithName:
@interface UIColor (namedColors)
+ (UIColor *) colorWithName:(NSString *) name;
+ (void) setColor:(UIColor *) color forName:(NSString *) name;
@end
static NSMutableDictionary *colorStorage;
@implementation UIColor (namedColors)
+ (NSMutableDictionary *) colorStorage
{
if (!colorStorage)
colorStorage = [[NSMutableDictionary alloc] initWithCapacity:10];
return colorStorage;
}
+ (UIColor *) colorWithName:(NSString *) name
{
UIColor *result =[[self colorStorage] valueForKey:name]; // See if we have a color with this name in the colorStorage.
if (result) return result;
SEL selector = NSSelectorFromString(name); // look for a class method whose selector matches the given name, such as "blueColor" or "clearColor".
if ([self respondsToSelector:selector] && (result = [self performSelector:selector]))
if ([result isKindOfClass:[self class]])
return result;
return nil;
}
+ (void) setColor:(UIColor *) color forName:(NSString *) name
{
[[self colorStorage] setValue:color forKey:name];
}
@end
Có thể quá phức tạp? Đơn giản '[UIColor myRedColor]' hoặc '[UIColor anotherRedColor]' sẽ đủ và đơn giản hơn, phải không? – Tricertops
Vâng, bạn có thể làm điều này.
Ở cuối trình chọn màu bật lên trong Trình tạo giao diện, có một hàng ô vuông bạn có thể sử dụng để lưu trữ màu để sử dụng sau này. Kéo một màu vào nó từ hình chữ nhật, nơi màu hiện tại được hiển thị ở phía trên cùng của bộ chọn màu để lưu trữ nó, và sau đó chỉ cần nhấp vào một màu được lưu trữ sau để sử dụng nó.
Điều này sẽ không cho phép bạn áp dụng lại màu khi bạn quyết định thay đổi màu. Nhưng đây là cách duy nhất để tiết kiệm màu sắc cho việc sử dụng lại thủ công. – Tricertops
@iMartin Bạn nói đúng rằng đây là một mối quan tâm, và tôi đã không xem xét nó. Tuy nhiên, với một số hackery, bạn vẫn có thể hoán đổi màu trên toàn cầu khi sử dụng phương thức này. Nếu bạn muốn thay đổi màu trên bảng phân cảnh, chỉ cần tìm và thay thế tất cả các lần xuất hiện của thẻ đại diện cho màu đó trong XML cơ bản của Bảng phân cảnh (hoặc của tất cả các XIB trong dự án của bạn). Đó là một hack, nhưng nó sẽ làm việc, và nó không phải cái gì bạn sẽ cần phải làm thường xuyên. –
Không thể trong giao diện Builder. Thực hiện trong mã, ví dụ bằng cách tạo phân lớp đặc biệt của nút.
Bạn có thể sử dụng bảng màu của hệ thống để lưu màu, nhưng bạn vẫn cần áp dụng màu cho tất cả các nút mỗi khi bạn quyết định thay đổi màu đó. Hoặc bạn chỉ có thể sử dụng Màu được sử dụng gần đây trong trình chọn màu, nhưng cả hai cách đều không đủ năng động.
Cảm ơn bạn đã thực sự trả lời câu hỏi. – KPM
Tôi không tin rằng có một cách để làm điều này hoàn toàn trong trình tạo giao diện, thật không may. Tuy nhiên, bạn có thể đến khá gần với một chút mã. Cách tốt nhất mà tôi đã tìm thấy để có thể thay đổi màu sắc trong suốt ứng dụng trong một đi là để phân lớp các mục mà bạn muốn màu (UILabel, ví dụ) để thiết lập màu sắc khi khởi tạo:
@interface HuedUILabel : UILabel
@end
@implementation HuedUILabel
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
self.textColor = [AppConfig primaryColor];
}
return self;
}
@end
Sau đó, , đặt nhãn có một lớp tùy chỉnh trong IB:
Bây giờ, khi bạn muốn thay đổi màu sắc của tất cả UILabels, bạn có thể làm điều đó bằng cách thay đổi một nét màu sắc của bạn và bạn không phải làm lộn xộn mã của bạn với một loạt các nhiệm vụ xuất hiện.
- 1. Khi nào tôi nên sử dụng Trình tạo giao diện?
- 2. Sự khác biệt màu sắc giữa drawRect và Trình tạo giao diện?
- 3. Màu của Trình tạo giao diện khác với mã màu
- 4. Không sử dụng Trình tạo giao diện có mua cho tôi bất kỳ thứ gì không?
- 5. Giao diện người dùng - Màu sắc và bố cục
- 6. Tôi có thể gạch dưới văn bản của một NSTextField từ trình tạo giao diện không?
- 7. Tôi có thể di chuyển các hạn chế tự động trong Trình tạo giao diện không?
- 8. Lặp lại màu sắc
- 9. Tôi có thể tạo đối tượng cho giao diện không?
- 10. Tôi có thể sử dụng mvc mini profiler trong ứng dụng giao diện điều khiển không?
- 11. Android Giao diện hình nền và màu sắc
- 12. Sử dụng Trình tạo giao diện cho UITableViews
- 13. Màu sắc lập trình chiến đấu
- 14. Trình tạo giao diện thay đổi lỗi màu văn bản?
- 15. Tôi có thể sử dụng lớp scala thực hiện giao diện java từ Java không?
- 16. Màu giao diện người dùng trong Eclipse
- 17. Làm thế nào để sử dụng màu sắc trong giao diện điều khiển đầu ra trong Scala hoặc Java?
- 18. Hợp đồng WCF có thể sử dụng nhiều giao diện gọi lại không?
- 19. trình tự qua màu sắc trong R
- 20. Tạo hoặc sử dụng lại khung giao diện Emacs hiện có
- 21. Tôi có thể sử dụng @PostConstruct trên phương thức giao diện không?
- 22. Trình tạo giao diện có sử dụng phương thức -init để khởi tạo bộ điều khiển chế độ xem không?
- 23. Tôi có thể tạo giao diện giống như Java trong Perl không?
- 24. Việc sử dụng cách tạo lớp trong giao diện và giao diện bên trong lớp
- 25. Thay đổi màu trong giao diện điều khiển eclipse java
- 26. Tôi có thể khai báo một biến kiểu 'giao thức' trong giao diện Objective-C không?
- 27. Mục tiêu-C. Bạn có thể sử dụng giao thức như giao diện Java không?
- 28. Làm thế nào tôi có thể thay đổi màu sắc của một clearButton UITextField?
- 29. Java sử dụng giao diện làm gọi lại
- 30. Màu sắc sai khi sử dụng RenderTarget2D trong XNA
Phần nào của "trong Trình tạo giao diện" đã làm mọi người trả lời câu hỏi này không hiểu được? Kỳ dị. –
@MarkAmery Điều đó có nghĩa, cách duy nhất để làm điều này là sử dụng _code_. – Tricertops
Thật ngớ ngẩn khi không có cách nào để làm điều này. Ai muốn điều chỉnh màu trên 100 trang từng cái một trong IB? – Jonny