2012-11-07 28 views
11

In meiner App habe ich eine UITextView und eine Schaltfläche direkt unter der Textansicht, um ein Foto in die UITextView während der Bearbeitung einzufügen.Hinzufügen von Bildern zu UITextView

Meine Anforderung ist, dass der Benutzer Benutzer in der Lage ist, den Text darin zu bearbeiten und Bilder bei Bedarf einzufügen.

Ähnlich wie Stackoverflow App eigenen UITextView:

enter image description here

Antwort

17

Sie können die Bildansicht als Subview UITextView hinzuzufügen.

einen Imageview mit Bild erstellen:

UIImageView *imageView = [[UIImageView alloc] initWithImage:yourImage]; 
[imageView setFrame:yourFrame]; 
[yourTextView addSubview:imageView]; 

Edit:

Für die überlappende Verwendung zu vermeiden (Danke @ Chris):

CGRect aRect = CGRectMake(156, 8, 16, 16); 
[imageView setFrame:aRect]; 
UIBezierPath *exclusionPath = [UIBezierPath bezierPathWithRect:CGRectMake(CGRectGetMinX(imageView.frame), CGRectGetMinY(imageView.frame), CGRectGetWidth(yourTextView.frame), CGRectGetHeight(imageView.frame))]; 
yourTextView.textContainer.exclusionPaths = @[exclusionPath]; 
[yourTextView addSubview:imageView]; 
+9

Aber wie verhindern Sie die Imageview aus den Text in der Textansicht abdecken? Wie lässt sich der Text in der Bildansicht fließen? –

+5

CGRect aRect = CGRectMake (156, 8, 16, 16); [attachmentView setFrame: aRect]; UIBezierPath exclusionPath * = [UIBezierPath bezierPathWithRect: CGRectMake (CGRectGetMinX (attachmentView.frame), CGRectGetMinY (attachmentView.frame), CGRectGetWidth (internalTextView.frame), CGRectGetHeight (attachmentView.frame))]; internalTextView.textContainer.exclusionPaths = @ [Ausschlusspfad]; [internalTextView addSubview: Anhangsansicht]; –

1

Check this out, ios-5-rich-text-editing-series. In iOS 5 können Sie Bilder einfügen und HTML-Texte verwenden. Möglicherweise müssen Sie UIWebview und Webkit verwenden.

Sie können auch mit EGOTextView überprüfen, die viele Rich-Text-Bearbeitungsfunktionen hat.

+0

@ user1645721, Wenn Sie möchten, dass der Benutzer nach dem Bild Text eingibt, müssen Sie möglicherweise die obigen Vorschläge in meiner Antwort verwenden. – iDev

1

nur als ein Subview von Textview wie unten hinzufügen ..

[yourTextView addSubview:yourImageView]; 
9

Wenn Sie es nur als ein Subview hinzufügen, können einige Texte „hinter“ das Bild sein. So fügen Sie den Code, der den Text „sagen“ wird, der Bereich des Bildes ist nicht zugänglich:

UIBezierPath *exclusionPath = [UIBezierPath bezierPathWithRect:CGRectMake(CGRectGetMinX(imageView.frame),  
CGRectGetMinY(imageView.frame), CGRectGetWidth(imageView.frame), 
CGRectGetHeight(imageView.frame))]; 

textView.textContainer.exclusionPaths = @[exclusionPath]; 
0

erstellen Unterklasse von UITextView und überschreiben diese Methode

- (void)paste:(id)sender 
{ 
    NSData *data = [[UIPasteboard generalPasteboard] dataForPasteboardType:@"public.png"]; 

    if (data) 
    { 

     NSMutableAttributedString *attributedString = [[self attributedText] mutableCopy]; 

     NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init]; 

     textAttachment.image = [UIImage imageWithData:data scale:5]; 

     NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment]; 

     [attributedString replaceCharactersInRange:self.selectedRange withAttributedString:attrStringWithImage]; 

     self.attributedText = attributedString; 

    } 
    else 
    { 

     UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard]; 

     NSAttributedString *text = [[NSAttributedString alloc] initWithString:pasteBoard.string]; 

     NSMutableAttributedString *attributedString = [self.attributedText mutableCopy]; 

     [attributedString replaceCharactersInRange:self.selectedRange withAttributedString:text]; 

     self.attributedText = attributedString; 

    } 
} 
Verwandte Themen