Ich baue eine Tabelle mit etwas Text, der HTML ist, also verwende ich ein UIWebView als Unteransicht meiner benutzerdefinierten Tabellenzellen. Ich war schon auf ein Problem gestoßen - als ich in der Tabelle nach unten scrollte, würde es die UIWebViews eine Sekunde dauern, um zu aktualisieren. Ich würde z. B. Zellen in den Zeilen 1, 2 und 3 anzeigen. Ich würde nach unten blättern, um 8, 9 und 10 zu sagen. Für einen Moment war der Inhalt von UIWebView, der in Zelle 8 sichtbar war der Inhalt von Zelle # 1, der Inhalt in Zelle # 9 war der von Zelle # 2 und so weiter.Wie verwende ich ein UIWebView in einer Tabellenzelle?
Ich habe gelernt, dass das Problem war, dass UIWebViews einfach ihren Text langsam rendern. Es wurde vorgeschlagen, den Inhalt stattdessen so schnell wie möglich in den UIWebView zu laden, anstatt zu warten, bis die Tabelle den cellForRowAtIndexPath empfängt. So, jetzt habe ich ein Domain-Objekt, das vorher nur den Textinhalt des WebView hatte - aber jetzt hat es tatsächlich einen Verweis auf das UIWebView selbst.
Aber jetzt einige der Inhalte in der UIWebView rendert, und wenn ich durch die Tabelle blättern die UIWebView zeigt nur als graue Box. Wenn ich die graue Box berühre, erhält sie tatsächlich die Berührung und aktualisiert das WebView - zum Beispiel, wenn ich einen Link berühre (was ich tun oder nicht tun kann, da die Box grau ist und es mit einem Glücksfall wäre), Die Seite, mit der verlinkt wurde, wird angefordert und korrekt angezeigt.
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
// I suppose this isn't necessary since I am just getting it from the
// Domain Object anyway
content = [[UIWebView alloc] initWithFrame:CGRectZero];
content.backgroundColor = [UIColor blackColor];
[self addSubview:content];
[content release];
}
return self;
}
// called by cellForRowAtIndexPath
- (void)setMyDomainObject:(MyDomainObject*)anObject {
UIWebView *contentWebView = anObject.contentWebView;
int contentIndex = [self.subviews indexOfObject:content];
[self insertSubview:contentWebView atIndex:contentIndex];
}
Ich akzeptierte diese eine b/c der Realität, dass dies nicht etwas ist, das mit einem UIWebView getan werden kann. Persönlich habe ich aufgehört, das Feature zu verlassen, aber ich werde bald wiederkommen - und was ich tun werde, anstatt ein TableView zu verwenden, simuliere es einfach mit HTML und CSS und setze es in ein einziges WebView. Dann verwende ich ein WebViewDelegate, um Klicks auf Links zu "abfangen" und zu bestimmen, ob andere Webinhalte angezeigt werden sollen oder ob andere Aktionen in meiner Anwendung ausgeführt werden sollen. – bpapa