将文本设置为不带选择的下划线

时间:2012-10-01 18:39:30

标签: ios ios6 nsattributedstring underline

我试图让用户能够设置他们将键入下划线的文本,而不会选择当前的文本。这适用于iOS 6应用程序,在UITextView中输入文本。它将保存为NSAttributedString。大胆和斜体很好。关于下划线的一些事情是阻止它工作。

UITextView *textView = [self noteTextView];
NSMutableDictionary *typingAttributes = [[textView typingAttributes] mutableCopy];
[typingAttributes setObject:[NSNumber numberWithInt:NSUnderlineStyleSingle] forKey:NSUnderlineStyleAttributeName];
NSLog(@"attributes after: %@", typingAttributes);
[textView setTypingAttributes:typingAttributes];
NSLog(@"text view attributes after: %@", [textView typingAttributes]);

我的初始日志语句表明它设置为下划线:

attributes after: {
    NSColor = "UIDeviceRGBColorSpace 0 0 0 1";
    NSFont = "<UICFFont: 0xa9c5e30> font-family: \"Verdana\"; font-weight: normal; font-style: normal; font-size: 17px";
    NSKern = 0;
    NSStrokeColor = "UIDeviceRGBColorSpace 0 0 0 1";
    NSStrokeWidth = 0;
    NSUnderline = 1;
}

但紧接着的日志语句没有显示nsunderline属性。删除textView setTypingAttributes行没有任何影响。

text view attributes after: {
    NSColor = "UIDeviceRGBColorSpace 0 0 0 1";
    NSFont = "<UICFFont: 0xa9c5e30> font-family: \"Verdana\"; font-weight: normal; font-style: normal; font-size: 17px";
    NSKern = 0;
    NSStrokeColor = "UIDeviceRGBColorSpace 0 0 0 1";
    NSStrokeWidth = 0;
}

我很难过为什么我的工作是粗体和斜体,但没有强调。也为什么它似乎最初获得属性,然后忘记它。请分享您的任何见解。感谢。

2 个答案:

答案 0 :(得分:4)

我认为你发现了一个错误,或者至少是一些未记录的行为。如果我将输入属性设置为红色,我可以这样做:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
        replacementString:(NSString *)string {
    NSDictionary* d = textField.typingAttributes;
    NSLog(@"%@", d);
    NSMutableDictionary* md = [NSMutableDictionary dictionaryWithDictionary:d];
    // md[NSUnderlineStyleAttributeName] = @(NSUnderlineStyleSingle);
    md[NSForegroundColorAttributeName] = [UIColor redColor];
    textField.typingAttributes = md;
    return YES;
}

使用该代码,所有用户的新输入都是红色的。但是,如果我取消注释注释行,尝试在输入属性中添加下划线,它会打破整个事情 - 我没有得到下划线,我也没有得到红色着色!

但是,问题的其他部分的答案是 。你必须按照我的方式去做,在用户输入时重新输入输入属性,因为,正如文档明确指出的那样,“当文本字段的选择发生变化时,字典的内容会自动清除”(这就是“忘记了”你问的问题。)

答案 1 :(得分:0)

从iOS 6开始,UITextView现在声明属性attributionText,它允许您通过创建NSAttributedString来为文本加下划线。这是修改后的代码:

UITextView *textView = [self noteTextView];
NSMutableDictionary *typingAttributes = [[textView typingAttributes] mutableCopy];
[typingAttributes setObject:[NSNumber numberWithInt:NSUnderlineStyleSingle] forKey:NSUnderlineStyleAttributeName];
NSLog(@"attributes after: %@", typingAttributes);
textView.attributedText = [[NSAttributedString alloc] initWithString:[textView text] attributes:typingAttributes];
NSLog(@"text view attributes after: %@", [textView typingAttributes]);

通过使用此代码,键入的任何其他文本也将符合NSAttributedString中设置的格式,例如下划线

希望这有帮助!