2013-11-02 16 views
5

iOS 7, bir NSAttributedString öğesinin bir HTML dosyası veya verileriyle başlatılmasına izin verir. Uygulamaların metinleri hakkında 'Hakkında' bağlantı eklemeyi kolaylaştırmak için bu işlevi kullanmak istiyorum.NSAttributedString öğesinin HTML dosyası ile başlatılması HTTP bağlantılarını dosya URL'leri olarak ayrıştırır

Bunu başarmak için, aşağıdaki kodu ile NSAttributedString başlatmak:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"test.html" withExtension:nil]; 
NSError *error = nil; 
NSDictionary *options = nil; 
NSDictionary *attributes = nil; 
_textView.attributedText = [[NSAttributedString alloc] initWithFileURL:url options:options documentAttributes:&attributes error:&error]; 

ve aşağıdaki içeriğe sahip bir dosya:

<html><body> 
<p>This is a <a href=\"http://www.stackoverflow.com\">test link</a>. It leads to StackOverflow.<p> 
</body></html> 

Güncelleme hala

Yukarıdaki HTML NSString olarak kodda kullanmaya çalışmaktan kaçış izleri vardı. Kaçakları kaldırmak sadece iyi çalışır. Ayrıca kendi sorumu aşağıda cevapladı.

Güncelleme Sonu

Bu iyi çalışır ve düzgün bir şekilde biçimlendirilmiş url ve tıklanabilir bir dize verir. Bağlantıyı tıklamak UITextView'ın temsilci -textView: shouldInteractWithURL: inRange: yöntemini çağırır. Ancak, URL parametresini teftiş aslında URL gösterilmesi aşağıdaki mutlak dize vardır: Açıkçası uygun web sayfasını açmıyor

file:///%22http://www.google.com/%22 

. NSAttributedText ile ilgili belgelerin, bunun neden olduğunu belirleyecek kadar açık bir şekilde bulamıyorum.

Uygun URL oluşturmak için NSAttributedString'i nasıl başlatmalıyım bilen var mı?

cevap

0

Bu sorunun yanıtı, HTML dosyasının geçersiz olmasıdır.

html nesnesini Objective-C'de tanımlanan bir dizeden kopyalayıp yapıştırdıktan sonra, her alıntıdan önce çıkışları kaldırmayı unuttum. Bu, elbette bir HTML URL'si yerine doğrudan bir dosya URL'sine çevrildi. Çıkış işaretlerini kaldırmak bunu düzeltir.

1

bir NSString içine HTML dosyası okumayı deneyin ve daha sonra kullanmak: Bu UIWebViews durum ile benzer olup olmadığını

NSString *path = [[NSBundle mainBundle] pathForResource:@"test.html" ofType:nil]; 
NSString *html = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; 
_textView.attributedText = [[NSAttributedString alloc] initWithHTML:html baseURL:nil options:options documentAttributes:&attributes]; 

En azından bu çalışması gerekir. URL, baseURL kullanılarak çözülür. Kodunuzda kaynak URL'nin baseURL olarak kullanıldığı anlaşılmaktadır. Bu yüzden, yerel bir dosya URL'sine karşı çözümü önlemek için nil URL'sini geçiriyorum.

+2

Bu, işe yaramaz çünkü -initWithHTML bir OSX tek yöntemidir ve iOS için tanımlanmamıştır. Bununla birlikte, çözüm size çözüm için bir ipucu verdi. Çok teşekkürler! – SpacyRicochet

+0

iOS için NSAttributedString belgelerini kontrol ettim ve haklısınız. Ancak, http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/AttributedStrings/Tasks/CreatingAttributedStrings.html#//apple_ref/doc/uid/20000714-BBCCGGCC adresindeki Yönlendirilmiş Dize programlama kılavuzunda belirtilmiştir. Size dolaylı olarak yardımcı olduğuma sevindim :) – gimenete

+0

Yup. Bir NSData nesnesine koyulduktan sonra HTML'yi tekrar gözden geçirdikten sonra bunu anladım. Çıktığında, HTML içeriğinden çıkışları kaldırmayı unuttum. – SpacyRicochet

İlgili konular