RSS リーダーでは、多くの場合、ユーザー インターフェイスに 2 つのレベルがあり、この問題をどのように処理するかを検討する必要があります。マスター ビューと詳細ビュー。これらを 1 つずつ解決していきます。
マスター ビュー
フィード内のアイテムのリストを表示しているマスター ビュー。この場合、ほとんどの RSS リーダーは、アイテムのプレーン テキスト タイトルと、おそらくそのアイテムに関連付けられた画像のみを表示します。ここで問題となるのは、画像の URL を取得する場所です。ここには(私が知る限り)3つのオプションがあります:
要素のurl属性media:content。例については、 http://news.yahoo.com/rss/を参照してください。
url要素内の要素image。例については、 http://www.dpreview.com/feeds/news.xmlを参照してください。
または要素内から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.