Uitextview में html टेक्स्ट प्रदर्शित करें


84

मैं टेक्स्टव्यू में HTML टेक्स्ट कैसे दिखा सकता हूं?

उदाहरण के लिए,

string <h1>Krupal testing <span style="font-weight:
bold;">Customer WYWO</span></h1>

मान लीजिए कि टेक्स्ट बोल्ड है, इसलिए यह टेक्स्टव्यू में बोल्ड स्ट्रिंग के रूप में प्रदर्शित होता है, लेकिन मैं सामान्य टेक्स्ट प्रदर्शित करना चाहता हूं। क्या iPhone SDK में यह संभव है?

जवाबों:


53

IOS 5- पर UIWebView का उपयोग करें।

IOS 6+ पर आप कैसे उपयोग कर सकते हैं UITextView.attributedString, इसके लिए https://stackoverflow.com/a/20996085 देखें ।


एक अनिर्धारित -[UITextView setContentToHTMLString:] विधि भी है । यदि आप AppStore को सबमिट करना चाहते हैं तो इसका उपयोग न करें।


48
अप्राकृतिक तरीकों का उपयोग करने के लिए ऐप को अस्वीकार कर दिया जाएगा ......... मैं पहले से ही इसका अनुभव करता हूं।
सत्यम

यह विधि अभी भी ios 7 में अनिर्दिष्ट है?
अजीत

1
@Ajeet अगर आप इसे developer.apple.com में नहीं पा सकते हैं तो यह अनिर्दिष्ट है ।
kennytm

1
नमस्ते, पाठ दृश्य की ऊंचाई की गणना कैसे करें? मैं पाठ दृश्य को स्क्रॉल नहीं करना चाहता। मैंने textView.contensize का उपयोग किया। काम नहीं किया।
दुर्गाप्रसाद

1
यह काम करता हैं। लेकिन मुझे HTML तालिका सामग्री दिखाने की भी आवश्यकता है। जब मैंने कोशिश की, तो यह केवल <th> टैग की सामग्री को दिखाता है। HTML तालिका सामग्री कैसे दिखाएं?
थमराय टी

233

Ios 7+ के लिए कोड के निम्नलिखित ब्लॉक का उपयोग करें।

NSString *htmlString = @"<h1>Header</h1><h2>Subheader</h2><p>Some <em>text</em></p><img src='http://blogs.babble.com/famecrawler/files/2010/11/mickey_mouse-1097.jpg' width=70 height=100 />";
NSAttributedString *attributedString = [[NSAttributedString alloc]
          initWithData: [htmlString dataUsingEncoding:NSUnicodeStringEncoding]
               options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
    documentAttributes: nil
                 error: nil
];
textView.attributedText = attributedString;

7
नमस्ते, पाठ दृश्य की ऊंचाई की गणना कैसे करें? मैं पाठ दृश्य को स्क्रॉल नहीं करना चाहता। मैंने textView.contensize का उपयोग किया। काम नहीं किया।
दुर्गाप्रसाद

6
मैं स्ट्रिंग के फ़ॉन्ट को कैसे बदल सकता हूं? AddAttribute का उपयोग करना: NSFontAttributeName सभी फ़ॉन्ट (बोल्ड) रीसेट करता है।
22

15
फ़ॉन्ट बदलने के NSAttributedStringलिए , इसमें बदलाव करें NSMutableAttributedStringऔर जोड़ें[attributedString addAttributes:@{NSFontAttributeName: font} range:NSMakeRange(0, attributedString.length)];
अजुमल

1
इसे tv.frame = CGRectMake(0, 0, HUGE, 1); [tv sizeToFit];
स्वचालित रूप से

1
@ दुर्गाप्रसाद स्ट्रिंग की शैली को संशोधित करने के लिए आप परस्पर प्रतिलिपि बना सकते हैं और अपनी विशेषताओं को इसमें सेट कर सकते हैं:NSMutableAttributedString *mString = [[NSMutableAttributedString alloc] initWithAttributedString:attributedString]; [mString addAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]} range:NSMakeRange(0, mString.length)];
साउंड ब्लास्टर

50

के लिए स्विफ्ट 4 , : स्विफ्ट 4.2 और स्विफ्ट 5

let htmlString = """
    <html>
        <head>
            <style>
                body {
                    background-color : rgb(230, 230, 230);
                    font-family      : 'Arial';
                    text-decoration  : none;
                }
            </style>
        </head>
        <body>
            <h1>A title</h1>
            <p>A paragraph</p>
            <b>bold text</b>
        </body>
    </html>
    """

let htmlData = NSString(string: htmlString).data(using: String.Encoding.unicode.rawValue)

let options = [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html]

let attributedString = try! NSAttributedString(data: htmlData!, options: options, documentAttributes: nil)

textView.attributedText = attributedString

के लिए स्विफ्ट 3 :

let htmlString = """
    <html>
        <head>
            <style>
                body {
                    background-color : rgb(230, 230, 230);
                    font-family      : 'Arial';
                    text-decoration  : none;
                }
            </style>
        </head>
        <body>
            <h1>A title</h1>
            <p>A paragraph</p>
            <b>bold text</b>
        </body>
    </html>
    """

let htmlData = NSString(string: htmlString).data(using: String.Encoding.unicode.rawValue)

let attributedString = try! NSAttributedString(data: htmlData!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)

textView.attributedText = attributedString

वहाँ html करने के लिए बाहरी सीएसएस जोड़ने के लिए कोई रास्ता नहीं है @ Stable @pableiros
Mansuu को

@Mansuu .... आपको अपने बंडल से सीएसएस फ़ाइल को पढ़ना होगा: let path = Bundle.main.path(forResource: "styles", ofType: "css")सामग्री प्राप्त करें let content = try! String(contentsOfFile: path!, encoding: String.Encoding.utf8)और इसे html स्ट्रिंग
pableiros

धन्यवाद @pableiros यह काम किया है, लेकिन जिस तरह से मैं चाहता हूँ नहीं। मेरा बाहरी सीएसएस bootstrap.min.css आयात करता है। यह काम नहीं करता है जब मैं सामग्री प्राप्त करके UItextView में सीएसएस लागू करता हूं।
मानसु ....

बहुत बहुत धन्यवाद यह स्विफ्ट 3 के लिए मेरे लिए काम करता है :) इसे जारी रखें
अमृत ​​एंग्री

19

BHUPI का उत्तर सही है, लेकिन यदि आप HTML कंटेंट के साथ अपने कस्टम फॉन्ट को UILabel या UITextView से जोड़ना चाहते हैं, तो आपको अपने HTML को थोड़ा सुधारने की आवश्यकता है:

NSString *htmlString = @"<b>Bold</b><br><i>Italic</i><p> <del>Deleted</del><p>List<ul><li>Coffee</li><li type='square'>Tea</li></ul><br><a href='URL'>Link </a>";

htmlString = [htmlString stringByAppendingString:@"<style>body{font-family:'YOUR_FONT_HERE'; font-size:'SIZE';}</style>"];
/*Example:

 htmlString = [htmlString stringByAppendingString:[NSString stringWithFormat:@"<style>body{font-family: '%@'; font-size:%fpx;}</style>",_myLabel.font.fontName,_myLabel.font.pointSize]];
*/
 NSAttributedString *attributedString = [[NSAttributedString alloc]
                      initWithData: [htmlString dataUsingEncoding:NSUnicodeStringEncoding]
                           options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
                documentAttributes: nil
                             error: nil
            ];
textView.attributedText = attributedString;

आप नीचे दिए गए चित्र पर अंतर देख सकते हैं: यहां छवि विवरण दर्ज करें


1
क्या आप यहां Apple का सिस्टम फॉन्ट डाल सकते हैं?
coolcool1994

मैं बाहरी सीएसएस जोड़ना चाहता हूं, मैं यह कैसे कर सकता हूं? @
दाविद

12

आप OHAttributedLabel वर्गों पर एक नज़र डाल सकते हैं, मैंने अपने टेक्स्टफिल्ड के साथ इस तरह की समस्या को दूर करने के लिए इनका उपयोग किया है। इसमें उन्होंने आवश्यक शैली प्राप्त करने के लिए ड्राअरक्ट विधि को ओवरराइड किया है।

https://github.com/AliSoftware/OHAttributedLabel


OHAttributedLabel उल ली टैग कैसे प्रदर्शित कर सकता है?
user2955351

9

सामान्य नियंत्रण में जिम्मेदार स्ट्रिंग्स को प्रदर्शित करने के लिए iOS 7 को स्पष्ट समर्थन देने से पहले मेरी पहली प्रतिक्रिया हुई थी। अब आप निर्धारित कर सकते हैं attributedTextकी UITextViewएक करने के लिए NSAttributedStringका उपयोग कर HTML सामग्री से बनाए गए:

-(id)initWithData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error 

- initWithData: विकल्प: दस्तावेज: गुण: त्रुटि: (Apple डॉक्टर)

मूल उत्तर, इतिहास के लिए संरक्षित:

जब तक आप उपयोग नहीं करते हैं UIWebView, आपका समाधान सीधे निर्भर करेगा CoreText। जैसा कि एलैंथिरायन्स बताते हैं, समृद्ध पाठ प्रतिपादन को सरल बनाने के लिए कुछ ओपन सोर्स प्रोजेक्ट सामने आए हैं। मैं NSAttributedString-Additions-For-HTML की सिफारिश करूंगा ( संपादित करें: परियोजना को DTCoreText को दबा दिया गया है ), जो कि HTML से स्ट्रिंग को उत्पन्न करने और प्रदर्शित करने के लिए कक्षाएं पेश करता है।


4

उत्तर ने मुझे बताया कि BHUPI से।

नीचे के रूप में स्विफ्ट करने के लिए कोड स्थानांतरण:

ध्यान दें "allowLossyConversion: false"

यदि आप मान को सही पर सेट करते हैं, तो यह शुद्ध पाठ दिखाएगा।

let theString = "<h1>H1 title</h1><b>Logo</b><img src='http://www.aver.com/Images/Shared/logo-color.png'><br>~end~"

        let theAttributedString = try! NSAttributedString(data: theString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!,
            options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil)

        UITextView_Message.attributedText = theAttributedString

2
NSUnicodeStringEncodingसही है, क्योंकि NSString यूनिकोड-एनकोडेड है, न कि UTF8। CJK चरित्र के मामले में, आपको सही उत्तर नहीं मिलेगा।
डॉनसॉन्ग

3

स्विफ्ट 3 के लिए

    let theString = "<h1>H1 title</h1><b>Logo</b><img src='http://www.aver.com/Images/Shared/logo-color.png'><br>~end~"

    let theAttributedString = try! NSAttributedString(data: theString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!,
        options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
        documentAttributes: nil)

    UITextView_Message.attributedText = theAttributedString

0

कुछ मामलों के लिए UIWebView एक अच्छा समाधान है। चूंकि:

  • यह टेबल, चित्र, अन्य फाइलें प्रदर्शित करता है
  • यह तेज़ है (NSAttributedString: NSHTMLTextDocumentType के साथ तुलना)
  • यह बॉक्स से बाहर है

NSAttributedString का उपयोग करने से क्रैश हो सकता है, यदि html जटिल है या इसमें टेबल ( उदाहरण) हैं )

वेब दृश्य पर पाठ लोड करने के लिए आप निम्नलिखित स्निपेट (उदाहरण के लिए) का उपयोग कर सकते हैं:

func loadHTMLText(_ text: String?, font: UIFont) {
        let fontSize = font.pointSize * UIScreen.screens[0].scale
        let html = """
        <html><body><span style=\"font-family: \(font.fontName); font-size: \(fontSize)\; color: #112233">\(text ?? "")</span></body></html>
        """
        self.loadHTMLString(html, baseURL: nil)
    }

-2

आप एक और तरीका भी इस्तेमाल कर सकते हैं। थ्री 20 लाइब्रेरी एक विधि प्रदान करती है जिसके माध्यम से हम एक स्टाइल टेक्स्ट व्यू का निर्माण कर सकते हैं। आप यहाँ पुस्तकालय प्राप्त कर सकते हैं: http://github.com/facebook/three20/

क्लास TTStyledTextLabel में टेक्स्टफ्रॉमएक्सएचटीएमएल नामक एक विधि है: मुझे लगता है कि यह उद्देश्य पूरा करेगा। लेकिन यह पठनीय मोड में संभव होगा। मुझे नहीं लगता कि यह HTML सामग्री को लिखने या संपादित करने की अनुमति देगा।

एक सवाल यह भी है जो आपको इस बारे में मदद कर सकता है: यूआईबेल और टेक्स्ट व्यू के लिए HTML स्ट्रिंग सामग्री

मुझे इसकी मदद की उम्मीद है।


-3

NSDoc एक html फ़ाइल में एक स्ट्रिंग में पाठ फ़ाइल को सहेजता है और साथ ही इसे एक वेबव्यू में लोड करता है जो आपके UITextView के समान स्थान पर है ..

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.