Как добавить атрибуты в пустой TextView?

В моем приложении у меня есть UITextView и в представлении inputAccessory у меня есть несколько кнопок, которые позволяют пользователю печатать жирным шрифтом, курсивом и т. Д.

Когда я нажимаю кнопку жирным шрифтом, я добавляю атрибут для жирного шрифта, но в UItextView нет текста, поэтому выбранный диапазон всегда (0,0). Что я должен использовать в качестве выбранного диапазона, чтобы я мог ввести текст, выделенный жирным шрифтом. И когда я снова нажимаю кнопку "полужирный", он должен убрать атрибут "жирный шрифт" и позволить пользователю снова ввести обычный шрифт. Вот код, который я использую:

-(void)addOrRemoveFontTraitWithName:(NSString *)traitName andValue:(uint32_t)traitValue {

    NSRange selectedRange = [self.commentsTextView selectedRange];


    NSDictionary *currentAttributesDict;
    if (selectedRange.location==0 && selectedRange.length==0) {
        //currentAttributesDict = [self.commentsTextView.textStorage attributesAtIndex:selectedRange.location effectiveRange:nil];
    }
    else{
        currentAttributesDict = [self.commentsTextView.textStorage attributesAtIndex:selectedRange.location
                                                                                    effectiveRange:nil];
    }

    UIFont *currentFont;
    if (currentAttributesDict.count >0) {
        currentFont = [currentAttributesDict objectForKey:NSFontAttributeName];
    }
    else{
        currentFont = [UIFont fontWithName:@"Sans-Regular" size:20.0f];
    }
    //currentFont = [currentAttributesDict objectForKey:NSFontAttributeName];
    UIFontDescriptor *fontDescriptor = [currentFont fontDescriptor];

    NSString *fontNameAttribute = [[fontDescriptor fontAttributes] objectForKey:UIFontDescriptorNameAttribute];
    UIFontDescriptor *changedFontDescriptor;

    if ([fontNameAttribute rangeOfString:traitName].location == NSNotFound) {
        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];

    NSDictionary *dict = @{NSFontAttributeName: updatedFont};

    /*NSMutableDictionary * combined = [[NSMutableDictionary alloc]init];
    [combined setObject:updatedFont forKey:NSFontAttributeName];
    [combined setObject:[NSNumber numberWithInt:1] forKey:NSUnderlineStyleAttributeName];*/
    NSRange newRange = NSMakeRange(0, 10000);
    [self.commentsTextView.textStorage beginEditing];
    [self.commentsTextView.textStorage setAttributes:dict range:newRange];
    [self.commentsTextView.textStorage endEditing];
}

1 ответ

Я думаю, используя setTypingAttributes: может помочь тебе То же самое объясняется здесь.

Другие вопросы по тегам