2 Stimmen

Gelesene/ungelesene Zelle (mit drawrect)

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?))

0voto

Aditya Punkte 4398

Sie können diese Funktionalität implementieren, indem Sie Ihren Code in der

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

//Add the indexPath.row values in an array.
}

Fügen Sie die benutzerdefinierte Funktionalität (wie die Anzeige des Titels in FETT für ungelesen) in der

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

//Check if the indexPath.row is available in the array
//If yes then Normalize the fonts
//Else Keep them BOLD.

}

0voto

joshpaul Punkte 953

Wenn Sie nicht gerade zeichnen, implementieren Sie nicht in drawRect: . Ich kenne Ihren speziellen Code nicht, daher kann es sein, dass er in Ihrem Fall nicht korrekt ist.

Um die gesamte Tabelle neu zu laden ( alle Zellen), sehen Sie sich die UITableViews - (void)reloadData

Um eine bestimmte Zelle neu zu laden, sehen Sie sich UITableViews - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation und verwenden Sie es, um die betreffende Zelle neu zu laden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X