我试图让用户能够设置他们将键入下划线的文本,而不会选择当前的文本。这适用于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;
}
我很难过为什么我的工作是粗体和斜体,但没有强调。也为什么它似乎最初获得属性,然后忘记它。请分享您的任何见解。感谢。
答案 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中设置的格式,例如下划线
希望这有帮助!