我有一个UITextView,它有一些文字和2个按钮,用于选择短文加粗,以使其斜体
- (IBAction)boldedSelectedText:(UIButton*)sender {
UIFontDescriptor* bodyFontDescriptor=[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
UIFontDescriptor* boldFontdescriptor=[bodyFontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
self.body.font=[UIFont fontWithDescriptor:boldFontdescriptor size:0.0];
}
- (IBAction)italicSelectedText:(UIButton *)sender {
UIFontDescriptor* bodyFontDescriptor=[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
UIFontDescriptor* italicFontdescriptor=[bodyFontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
self.body.font=[UIFont fontWithDescriptor:italicFontdescriptor size:0.0];
}
问题是,当我选择一个文本并使其粗体然后斜体时,它只变为斜体和副 它不能大胆和斜体同时我不知道为什么?
答案 0 :(得分:2)
您需要先检索现有的符号特征,然后添加新的特征。 我使用辅助方法来添加/删除我的特征,
-(void) addOrRemoveFontTraitWithName:(NSString*)traitName andValue:(uint32_t)traitValue
{
NSMutableDictionary *attributes;
NSRange selectedRange=[self.attributedTextview selectedRange];
if (selectedRange.length == 0)
{
//no text selected
attributes=[[NSMutableDictionary alloc] initWithDictionary:self.attributedTextview.typingAttributes];
}
else
{
attributes=[[NSMutableDictionary alloc] initWithDictionary:[self.attributedTextview.textStorage attributesAtIndex:selectedRange.location effectiveRange:nil]];
}
UIFont *currentFont=[attributes objectForKey:NSFontAttributeName];
UIFontDescriptor *fontDescriptor=[currentFont fontDescriptor];
NSString *fontNameAttribute=[[fontDescriptor fontAttributes] objectForKey:UIFontDescriptorNameAttribute];
UIFontDescriptor *changedFontDescriptor;
if ([fontNameAttribute containsString:traitName])
{
uint32_t existingTraitsWithNewTrait=[fontDescriptor symbolicTraits] | traitValue;
changedFontDescriptor=[fontDescriptor fontDescriptorWithSymbolicTraits:existingTraitsWithNewTrait];
}
else
{
uint32_t existingTraitsWithoutTrait=[fontDescriptor symbolicTraits] & ~traitValue;
changedFontDescriptor=[fontDescriptor fontDescriptorWithSymbolicTraits:existingTraitsWithoutTrait];
}
UIFont *updatedFont=[UIFont fontWithDescriptor:changedFontDescriptor size:0.0];
[attributes setObject:updatedFont forKey:NSFontAttributeName];
if (selectedRange.length != 0)
{
[self.attributedTextview.textStorage beginEditing];
[self.attributedTextview.textStorage setAttributes:attributes range:selectedRange];
[self.attributedTextview.textStorage endEditing];
}
[self.attributedTextview setTypingAttributes:attributes];
}
如果用户选择了某些文本,则该特征将应用于该特定选择,否则将应用于textview的typingAttributes属性。 添加/删除特征需要按位操作。
本文详细介绍了这一主题,非常值得一读 Using Text Kit to Manage and Draw Text in IOS Apps
此致
答案 1 :(得分:0)
它是粗体,然后是斜体,因为你要求粗体然后斜体。电脑无法读懂你的想法;它正在做你正在告诉它做的事情。如果你想要粗体和斜体,你必须要求粗体和斜体。当您说fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold
或UIFontDescriptorTraitItalic
时,您只提供一个特征。如果你想要两个特征,提供两个特征。