2016-08-05 5 views
0

Я пытаюсь добавить изображение к тексту просмотра текстаприписываемые текст не отображается текст вложения в UITextView

enter image description here

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{ 

    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage]; 
    [self updateTextViewWithImage:image]; 

    [picker dismissViewControllerAnimated:YES completion:nil]; 
} 

-(void)updateTextViewWithImage:(UIImage *)image{ 

    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_textView.text]; 
    NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init]; 
    textAttachment.image = image; 

    NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment]; 
    [attributedString replaceCharactersInRange:NSMakeRange(2, 1) withAttributedString:attrStringWithImage]; 
    _textView.attributedText = attributedString; 
} 

В Xcode отладчика, я вижу, что текст attachemnt правильно добавлен.

Перед вызовом метода:

Hello{ 
    NSFont = "<UICTFont: 0x1004333f0> font-family: \".SFUIText\"; font-weight: normal; font-style: normal; font-size: 14.00pt"; 
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 0, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0"; 
} 

После вызова метода:

He{ 
    NSFont = "<UICTFont: 0x1004019c0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; 
    NSOriginalFont = "<UICTFont: 0x1004019c0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; 
}{ 
    NSAttachment = "<NSTextAttachment: 0x1702a2880>"; 
    NSFont = "<UICTFont: 0x1004019c0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; 
    NSOriginalFont = "<UICTFont: 0x1004019c0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; 
}lo{ 
    NSFont = "<UICTFont: 0x1004019c0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; 
    NSOriginalFont = "<UICTFont: 0x1004019c0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; 
} 

Но даже после того, как метод вызывается, вид текста не показывает изображение в it.Also TextView является not nil. Я могу добавить изображение в виде подсмотра в текстовое представление, но я бы хотел использовать атрибутированную строку.

Редактировать: Я также попытался изменить размер изображения до 100x100, а также установить атрибутный текст в раскадровке. Но текст не добавляется в текст.

Странно, что изображение добавляется в атрибутный текст, если textView создается и добавляется как подвью.

-(void)updateTextViewWithImage:(UIImage *)image{ 

    UIImage *img=[self imageWithImage:image scaledToSize:CGSizeMake(100, 100)]; 

    UITextView *textView = [[UITextView alloc] initWithFrame:_textView.frame]; 
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"before after"]; 
    NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init]; 
    textAttachment.image = img; 

    NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment]; 
    [attributedString replaceCharactersInRange:NSMakeRange(6, 1) withAttributedString:attrStringWithImage]; 
    textView.attributedText = attributedString; 
    _textView.attributedText=attributedString; 
    [_textView addSubview:textView]; 

} 

Это изображение не добавлено, если textView создан в IB.

Edit:

Я проверил адрес вида текста, то же самое на viewDidAppear и после того, как я получаю изображение.

<UITextView: 0x7d085a00 - at viewWillAppear 

<UITextView: 0x7d085a00; - at updateTextViewWithImage: 

В этом изменении, я переписывался с _textView

-(void)updateTextViewWithImage:(UIImage *)image{ 

     UIImage *img=[self imageWithImage:image scaledToSize:CGSizeMake(100, 100)]; 

     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"before after"]; 
     NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init]; 
     textAttachment.image = img; 

     NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment]; 
     [attributedString replaceCharactersInRange:NSMakeRange(6, 1) withAttributedString:attrStringWithImage]; 
     _textView.attributedText=attributedString; 

    } 

После того как я называю updateTextViewWithImage, я проверил viewDebugger:

enter image description here

и TextView не обновляется связанная строка.

+0

Не могли бы вы проверить адрес '_textView', это то же самое? Кроме того, с XCode Debug Hierarchy Tool (https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html#//apple_ref/doc/uid/TP40015022-CH9-SW2) , не могли бы вы проверить, что все в порядке? Мне интересно, если вы не делаете ошибку, поскольку она работает, когда вы добавляете новый 'UITextView' выше, который может быть уже 2 textView один над другим, и вы обновляете тот, который находится под ним, который скрыт выше. – Larme

+0

@ Larme, я обновил вопрос. –

+0

@ Larme, спасибо за подсказку, я обнаружил, что текст textView переопределен в методе viewWillAppear. –

ответ

0

Я обнаружил, что ошибка заключается в моем взгляде.

-(void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 
    [_textView becomeFirstResponder]; 

    //get the notes from datatabse 
    if ([_notesStatus isEqualToString:@"UpdateNotes"]) { 

     _textView.text=[_myManager getStringForRowWithId:_notesID]; 
     NSLog(@"text view addres %@",_textView); 

    } 
} 

После выбора камеры свергнут, viewWillAppear называется, и _textView.text является переопределение приписываемое строку.

Смежные вопросы