2016-04-18 17 views
0

Ich habe einen String zurückgeführt, die von HTML-Code decodiert wirdiOS: die Größe von Bildern in HTML zugeschrieben String

NSAttributedString *htmlstring =[[NSAttributedString alloc] initWithData:[formatString dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
                                       NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}documentAttributes:nil error:&error]; 

Und in der Zeichenfolge ich mehrere img-Tags wie

... 
<p style="text-align: left;"> 
<img src="http://139.196.32.98/ueditor/php/upload/image/20160408/1460107835846711.jpg" alt="1460107835846711.jpg" width="75" height="103" style="width: 75px; height: 103px;"/> 
<img src="http://139.196.32.98/ueditor/php/upload/image/20160408/1460106959338375.jpg" alt="1460106959338375.jpg" width="359" height="445" style="width: 359px; height: 445px;"/></p> 
... 

Jetzt muss ich Ändere die Größe des Bildes, um den mobilen Bildschirm zu reparieren. Und ich versuchte

NSString* substring = @"<img"; 
NSRange range = [htmlstring rangeOfString:substring]; 

aber es gibt nur das erste Suchergebnis, und wie den ganzen Tag in eine Teil zu machen?

Vielen Dank

+0

Sie können 'NSRegularExpression' verwenden, um den' ' zu finden – Larme

Antwort

2

Um Vergangenheit ersten Auftreten weiterzusuchen, müssen Sie in den Bereich, den Sie führen Sie Ihre Suche anpassen Es gibt eine Methode auf NSString, die Sie gerade das tun können.

- [NSString rangeOfString:options:range:]; 

Sie müssen also unter NSAttributedString gehen und mit seiner Klartextdarstellung arbeiten, auf die über seine schreibgeschützte Eigenschaft string zugegriffen werden kann.

Also die Idee ist, einen neuer Suchbereich jedes Mal eine Übereinstimmung gefunden zu berechnen ist:

NSString *substring = @"<img"; 
NSString *plainString = [htmlstring string]; 
NSRange searchRange = NSMakeRange(0, [plainString length]); 
NSRange openingTagRange = [plainString rangeOfString:substring options:0 range:searchRange]; 
while (openingTagRange.location < [plainString length]) 
{ 
    NSLog(@"found opening tag at %lu", (unsigned long)openingTagRange.location); 
    searchRange.location = NSMaxRange(openingTagRange); 
    searchRange.length = [plainString length] - NSMaxRange(openingTagRange); 
    openingTagRange = [plainString rangeOfString:openingTagString options:0 range:searchRange]; 
} 

Wenn Sie auch den ganzen Tag in einen Teil machen wollen, dehnt ich die while-Schleife in den folgenden:

Beachten Sie, dass die erste schließende Klammer angenommen wird, um das Tag zu schließen, was vermutlich nicht immer der Fall ist.