Meine App lädt Beiträge aus dem Internet in UITableViewCell herunter. Wenn Benutzer tippt auf Zelle, ich bin brauchen, um diesen Artikel als gelesen (wie auf Mail.app) zu setzen. Ich weiß nicht, wie das zu tun. Ich füge die URL (wenn der Benutzer auf die Zelle tippt) zur Datenbank hinzu (wie "url|url|url") und öffne die Detailansicht. Und wenn er zurück zur UITableView geht, prüft er die vorhandene URL in der DB. Tabelle ist jetzt zu langsam! Können Sie mir helfen und sagen, welche andere Methode kann ich verwenden, um das zu tun? Wie in mail.app. Ich bin mit benutzerdefinierten Zelle und Code in drawRect Methode. Bitte, Hilfe
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"%d",indexPath.row];
NSMutableArray *array=[NSMutableArray array];
if([[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]!=nil)
[array addObjectsFromArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]];
NSUInteger indexOfObject = [array count]>0?[array indexOfObject:[NSNumber numberWithInt:indexPath.row]]:100000; //I add this, because row don't want update using updateRowAtIndexPath
QuickCell *cell = (QuickCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil || (indexOfObject!=NSNotFound && indexOfObject!=100000))
{
cell = [[[QuickCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.frame = CGRectMake(0.0, 0.0, 320.0, 68.0);
cell.accessoryType = UITableViewCellAccessoryNone;
if([self.subject count]>0)
{
[self.allImages addObject:[NSNull null]];
NSString *userNameLJ = [NSString stringWithFormat:@"%@",[self.journalurl objectAtIndex:indexPath.row]];
userNameLJ = [userNameLJ stringByReplacingOccurrencesOfString:@"http://"
withString:@""];
userNameLJ = [userNameLJ stringByReplacingOccurrencesOfString:@".livejournal.com"
withString:@""];
userNameLJ = [userNameLJ stringByReplacingOccurrencesOfString:@"community/"
withString:@""];
NSString *postURL = [NSString stringWithFormat:@"http://m.livejournal.com/read/user/%@/%@",userNameLJ,[self.ditemid objectAtIndex:indexPath.row]];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[self.subject objectAtIndex:indexPath.row] forKey:@"title"];
[dict setObject:[Utilities replaceForCell:[Utilities flattenHTML:[self.entry objectAtIndex:indexPath.row]]] forKey:@"description"];
if([[database executeQuery:@"SELECT * FROM read WHERE posts=?;",postURL] count]>0)
{
//if this post is read
[dict setObject:[NSNumber numberWithBool:NO] forKey:@"highlighted"];
}
else {
[dict setObject:[NSNumber numberWithBool:YES] forKey:@"highlighted"];
}
[dict setObject:[self.journalname objectAtIndex:indexPath.row] forKey:@"nick"];
[cell setContentForCell:dict];
BOOL trueOrFalse = [[self.allImages objectAtIndex:indexPath.row] isKindOfClass:[NSNull class]]?YES:NO;
if(trueOrFalse)
{
if (tableView.dragging == NO && tableView.decelerating == NO)
{
//if no image cached now, download it
if(indexPath.row<6 && self.updating==YES)
[self startDownloading:indexPath];
if(self.updating==NO)
[self startDownloading:indexPath];
}
}
else
{
[cell setImageForCell:[self.allImages objectAtIndex:indexPath.row]];
}
}
if(indexOfObject!=NSNotFound && indexOfObject!=100000)
{
//delete this row from userdefaults
[array removeObjectAtIndex:indexOfObject];
if([array count]>0)
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"readPostS"];
else [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"readPostS"];
}
}
return cell;
}
//////////////////////////////////////////////////////////////
///////-(void)viewWillApear
//////////////////////////////////////////////////////////////
NSMutableArray *readPosts = [NSMutableArray array];
if([[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]!=nil)
{
[readPosts addObjectsFromArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]];
self.read = (NSMutableArray*)[database executeQuery:@"SELECT * FROM read;"];
for(int i=0;i<[readPosts count];i++)
{
[self.myTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[[readPosts objectAtIndex:i] intValue] inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
}
}
///////////////////////////////////////////////
///////THIS FILE OPENS POSTS FOR READING
///////////////////////////////////////////////
if([[database executeQuery:@"SELECT * FROM read WHERE posts=?;",self.postURL] count]==0)
{
[database executeNonQuery:@"INSERT INTO read VALUES (?);",self.postURL];
NSMutableArray *defaults = [NSMutableArray array];
if([[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]!=nil)
defaults = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"readPostS"]];
[defaults addObject:[NSNumber numberWithInt:self.currentIndex]];
[[NSUserDefaults standardUserDefaults] setObject:defaults forKey:@"readPostS"];
}
Ok. Ich denke, mein Code ist zu schlecht und Sie können verstehen, was ich hier tue) Antwort auf andere Frage. Wie kann ich versteckte Zellen aktualisieren? Der Benutzer sieht nur 6 Zellen in einem Moment, ich muss zum Beispiel 10 Zellen aktualisieren. Wie? Oder wie kann ich eine Zelle neu laden, wenn sie bereits existiert? Sagen wir.
NSString *CellIdentifier = [NSString stringWithFormat:@"%d",indexPath.row];
QuickCell *cell = (QuickCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[QuickCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.frame = CGRectMake(0.0, 0.0, 320.0, 68.0);
cell.accessoryType = UITableViewCellAccessoryNone;
.........}
jetzt Zelle vorhanden ist und wenn ich reload Daten nichts passieren aufrufen. Und reloadCellAtIndexPath funktioniert auch nicht, weil Zelle hat eindeutige Kennung und ixists.
WIE KANN ICH DIE ZELLE NEU LADEN UND DRAWRECT ERNEUT AUFRUFEN?))