像iOS中的“样式”一样

时间:2013-10-24 21:19:47

标签: ios

对iOS有点新,但学习速度很快。

我的应用中有很多标签和UIText字段。在真正的iPad上观看之后,我决定将一系列字段中的文字改为Helv Neu浓缩粗体尺寸24.我认为必须有更好的方法,我可以设置某种类型的风格x个字段,然后只设置样式,但我找不到那样的东西。

帮助!

3 个答案:

答案 0 :(得分:3)

DB5

一种选择是使用Vesper发明的系统DB5来存储plist中的字体,颜色等。然后,当您想要更改它们时,您可以永久地在一个地方更改它们。您甚至可以让您的应用程序从服务器下载新的Plist,允许您远程修改应用程序的外观。

归因字符串词典

另一种选择是使用常量文件来定义Attributed String字典。

基本示例

+ (NSDictionary *) biggerLetterSpacingText
{
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
    [dictionary setObject:[NSNumber numberWithFloat:1.3] forKey:NSKernAttributeName];
    return dictionary;
}

超过基本示例

+ (NSDictionary *) linkAttributes
{
    static NSMutableDictionary *dictionary;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        dictionary = [NSMutableDictionary dictionary];

        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;

        [dictionary setObject:paragraphStyle forKey:(NSString *)kCTParagraphStyleAttributeName];
    });

    UIColor *tintColor = [[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] window] tintColor];

    UIColor *colorToUse;

    if (CGColorEqualToColor(tintColor.CGColor, [UIColor blueColor].CGColor)) {
        // links are enabled
        colorToUse = [UIColor blueColor];
    } else {
        // grey them out
        colorToUse = tintColor;
    }

    [dictionary setObject:colorToUse forKey:(NSString *)kCTForegroundColorAttributeName];
    return dictionary;
}

注释

此特定代码可用于着色iOS 7上的超链接。如果有帮助,请随意使用更简单的内容。

顶部的dispatch_once代码确保始终使用一个字典(因此,每次调用此方法时,最终都不会分配新字典。

底部的代码根据当前应用的色调颜色调整色调颜色。因此,如果弹出UIAlertView或UIActionSheet,所有链接都可以从蓝色变为灰色。

示例代码

使用它(例如在标签上):

NSString *text = @"Hello, world!";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text];
[attributedString addAttributes:[MyConstants linkAttributes] range:NSMakeRange(0, [text length])];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.attributedText = attributedString;

答案 1 :(得分:0)

您应该使用类别。这是一个例子:

@interface UILabel (FontName)

- (void)setFontName:(NSString *)name;

@end


@implementation UILabel (FontName)

- (void)setFontName:(NSString *)name
{

    self.font = [UIFont fontWithName:name size:self.font.pointSize];
}

@end

答案 2 :(得分:0)

我意识到这是一个古老的问题,但是这里有一些框架的其他建议,允许您在应用程序中使用可重用的样式:

开源:

封闭源(但免费):

  • nativeCSS - http://nativecss.com/
    • 使用带有标准CSS / HTML属性名称的高级样式表,以及一些非标准添加
    • 支持多个平台