iOS归因于字符串 - 最小的例子

时间:2012-11-06 20:20:51

标签: ios nsattributedstring

我最近决定解决我遇到的问题的最佳方法是使用NSAttributedString实例。文档似乎缺乏,至少对新手而言。 stackoverflow的答案主要有两种类型:

  1. 阅读文档
  2. 使用AliSoftware最优秀的OHAttributedLabel课程。
  3. 我真的很喜欢第二个答案。但我想更好地理解NSAttributedString,所以我在这里提供了最小的(?)组装和显示属性字符串的例子,以防它人帮助。

    我使用Storyboard和ARC在Xcode(4.5.2)中为iPad创建了一个新的单窗口项目。

    AppDelegate没有任何变化。

    我创建了一个基于UIView的新类,将其命名为AttributedStringView。对于这个简单的示例,最简单的方法是使用drawAtPoint:方法将属性字符串放在屏幕上,这需要一个有效的图形上下文,并且最容易在UIView子类的drawRect:方法中使用。

    以下是ViewController.m的全部内容(未对头文件进行任何更改):

    #import "ViewController.h"
    #import "AttributedStringView.h"
    
    @interface ViewController ()
    
    @property (strong, nonatomic) AttributedStringView *asView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self.view addSubview:self.asView];
    }
    
    - (AttributedStringView *)asView
    {
        if ( ! _asView ) {
            _asView = [[AttributedStringView alloc] initWithFrame:CGRectMake(10, 100, 748, 500)];
            [_asView setBackgroundColor:[UIColor yellowColor]]; // for visual assistance
        }
        return _asView;
    }
    
    @end
    

    这里是完整的AttributedStringView.m(没有对头文件进行任何更改):

    #import "AttributedStringView.h"
    
    @interface AttributedStringView ()
    
    @property (strong, nonatomic) NSMutableAttributedString *as;
    
    @end
    @implementation AttributedStringView
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
    if (self) {
        NSString *text = @"A game of Pinochle is about to start.";
        //                 0123456789012345678901234567890123456
        //                 0         1         2         3
        _as = [[NSMutableAttributedString alloc] initWithString:text];
            [self.as addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:36] range:NSMakeRange(0, 10)];
            [self.as addAttribute:NSFontAttributeName value:[UIFont italicSystemFontOfSize:36] range:NSMakeRange(10, 8)];
            [self.as addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:36] range:NSMakeRange(18, 19)];
    
            if ([self.as size].width > frame.size.width) {
                NSLog(@"Your rectangle isn't big enough.");
                // You might want to reduce the font size, or wrap the text or increase the frame or.....
            }
        }
        return self;
    }
    
    - (void)drawRect:(CGRect)rect
    {
        [self.as drawAtPoint:CGPointMake(0, 100)];
    }
    
    @end
    

0 个答案:

没有答案