2

私は自分の問題の解決に懸命に取り組んでおり、誰かがここで私を助けてくれることを願っています. フォーマットされたデータを含む RSS フィードがあります。例えば

<description>
    <![CDATA[
     <p> ... <a href="https://www.google.com/">Klick here</a>.</p>
    ]]>
</description>
<content:encoded>
    <![CDATA[<p> ... <a href="https://www.google.com/">Klick here</a>.</p> <img src="http://image_url.jpg" alt="" title="some text" width="622" height="466" class="size-full wp-image-117" />
    ]]>
</content:encoded>

フォーマットをラベルに適用する可能性はありますか? またはより良い場合はWebViewに?RSS フィード全体が表示されるようにするにはどうすればよいですか?

私のコードをよりよく理解するために:これがのプロジェクトに実装するソースです。

4

1 に答える 1

3

RSS リーダーでは、多くの場合、ユーザー インターフェイスに 2 つのレベルがあり、この問題をどのように処理するかを検討する必要があります。マスター ビューと詳細ビュー。これらを 1 つずつ解決していきます。

マスター ビュー

フィード内のアイテムのリストを表示しているマスター ビュー。この場合、ほとんどの RSS リーダーは、アイテムのプレーン テキスト タイトルと、おそらくそのアイテムに関連付けられた画像のみを表示します。ここで問題となるのは、画像の URL を取得する場所です。ここには(私が知る限り)3つのオプションがあります:

  1. 要素のurl属性media:content例については、 http://news.yahoo.com/rss/を参照してください。

  2. url要素内の要素image例については、 http://www.dpreview.com/feeds/news.xmlを参照してください。

  3. または要素内からHTMLimgタグを解析します。別のパーサーを介して HTML を実行することもできます (ただし、残念ながら、NSXMLParser は HTML の解析にあまり堅牢ではないため、Hpple などを追求する必要があるかもしれません)、または正規表現を使用して HTML から画像 URL を取得することができます。descriptioncontent:encoded

    - (NSArray *)imgSrcAttributesInString:(NSString *)string
    {
        NSError *error = NULL;
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>"
                                                                               options:NSRegularExpressionCaseInsensitive
                                                                                 error:&error];
    
        NSMutableArray *results = [NSMutableArray array];
    
        [regex enumerateMatchesInString:string
                                options:0
                                  range:NSMakeRange(0, [string length])
                             usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    
                                 [results addObject:[string substringWithRange:[result rangeAtIndex:1]]];
                             }];
    
        if ([results count] > 0)
            return results;
    
        return nil;
    }
    

これらの手法のどれを採用するかは、RSS ソースと、実行する作業の量によって異なります。ほとんどの RSS リーダーは 1 か 2 を通過するだけで、3 は通過しないと思います。

詳細ビュー

2 つ目は詳細ビューで、RSS アイテムに関連付けられた完全な詳細が表示されます。非常に簡単な方法の 1 つは、詳細ビューに tableview を使用せず、 を使用して標準UIViewControllerを設定し、UIWebViewその方法で結果を表示することです。

ラベルに関するご質問への回答として、iOS 6.0 より前では、フォーマットを に適用できませんでしたUILabel。iOS 6.0 から、このattributedTextプロパティを使用できます。しかし、それは HTML をサポートしていません。そのギャップを埋める試みがあります ( https://stackoverflow.com/a/4652521/1271826を参照) が、単にUIWebView.

于 2013-02-26T17:06:27.360 に答える