UIWebView в пользовательском UITableViewCell
-
10-07-2019 - |
Вопрос
я не уверен, что это хороший путь... у меня есть некоторые данные, которые я получаю из Интернета, которые, в свою очередь, заполняют табличное представление.Проблема в том, что текст представляет собой HTML (теги p и т. д.).Моей первой мыслью было создать в ячейке uiwebview и заполнить ее с помощью loadHTMLString.Факт в том, что это КРАЙНЕ работает.Но тогда клетка больше не была получателем прикосновений.
Итак, прежде чем мы углубимся в код, есть ли лучший способ заполнить ячейки, чем использование UIWebView.Это похоже на хак, и я боюсь, что даже если это сработает, Apple откажется от него.
//из моего пользовательского класса UITableViewCell:
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
[self setFrame:frame];
webcell = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,frame.size.width-20,frame.size.height)];
[self.contentView addSubview:webcell];
//bloack the webview from touches
UIView *cover = [[UIView alloc] initWithFrame:webcell.frame];
[self.contentView addSubview:cover];
[cover release];
}
return self;
}
-(void) setlabeldata: (feeditem *) feeditem {link = feeditem.link;
NSMutableString *htmlstring = [NSMutableString string];
[htmlstring appendString:@"<html><head><link rel='stylesheet' href='style.css'/></head><body>"];
[htmlstring appendFormat:@"<p>%@</p>",feedItem.title];
[htmlstring appendFormat:@"<p>%@</p>",feedItem.description];
[htmlstring appendString:@"</body></html>"];
[webcell loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]bundlePath]]];
}
Спасибо
Решение
если у кого-то нет опровержения, я пришел к выводу, что UIWebView в UITableViewCell — не очень хорошая идея.Хотя я не тестировал локальную htmlString...
Другие советы
Мы добились определенного успеха в использовании веб-просмотров в ячейках.Если вы хотите, чтобы ячейка получала события касания, вам необходимо установить веб-просмотр userInteractionEnabled
собственность на НЕТ.Вам также необходимо использовать отдельный идентификатор reuseIdentifier для каждой ячейки, поскольку веб-просмотру требуется некоторое время для загрузки его содержимого и он может быть повторно использован до того, как будет готов.
Я сделал это, статически распределив ячейки веб-просмотра, как только узнал, сколько мне понадобится для таблицы, и начал их загрузку за кадром.Никаких повторных идентификаторов, вам нужно самому отслеживать ячейки и то, куда они идут.