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 を取得することができます。description
content: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
.