2012-01-11 25 views
6

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?

+1

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ị. –

+1

@MarkAmery Điều đó có nghĩa, cách duy nhất để làm điều này là sử dụng _code_. – Tricertops

+0

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

Trả lời

-1

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.

-1

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]; 
+1

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

+0

Có suy nghĩ tốt @NSResponder không bao giờ nghĩ về điều đó :) –

+2

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

-2

Đâ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 
+0

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

3

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ó.

diagram showing how to save colors

+1

Đ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

+0

@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. –

7

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.

+0

Cảm ơn bạn đã thực sự trả lời câu hỏi. – KPM

1

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.

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