Чтение / Непрочитанная ячейка (используя drawrect) - PullRequest
2 голосов
/ 30 декабря 2010

Мое приложение загружает сообщения из Интернета в UITableViewCell. Когда пользователь нажимает на ячейку, мне нужно установить эту статью как прочитанную (как на Mail.app). Я не знаю, как это сделать. Я добавляю URL (когда пользователь нажимает ячейку) в базу данных (например, «url | url | url»), открываю подробный вид. И когда он возвращается к UITableView, проверяя существующий URL в БД. Стол сейчас слишком медленный! Можете ли вы помочь мне и сказать, какой другой метод я могу использовать для этого? Как в mail.app. Я использую пользовательскую ячейку и код в методе drawRect. Пожалуйста, помогите

     - (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. Я думаю, мой код плохой, и вы можете понять, что я здесь делаю) Ответьте на другой вопрос. Как я могу обновить скрытые ячейки? Пользователь видит только 6 ячеек в данный момент, мне нужно обновить, например, 10 ячеек. Как? Или как перезагрузить ячейку, если она уже существует? Скажем -

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;


.........}

Теперь ячейка существует, и если я вызываю данные перезагрузки, ничего не происходит. И reloadCellAtIndexPath тоже не работает, потому что ячейка имеет уникальный идентификатор и ixists.

КАК МОЖНО СЛЕДУЕТ ПЕРЕЗАГРУЗИТЬ КЛЕТОК И ВЫЗВАТЬ СНОВА?))

Ответы [ 2 ]

0 голосов
/ 30 декабря 2010

Если вы действительно не рисуете, не используйте drawRect:.Я не знаю, какой у вас код, так что в вашем случае это может быть неверно.

Чтобы перезагрузить всю таблицу ( все ячейки), посмотрите на - (void)reloadData* в UITableView.1007 *

Чтобы перезагрузить определенную ячейку, посмотрите на UITableView - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation и используйте ее для перезагрузки рассматриваемой ячейки.

0 голосов
/ 30 декабря 2010

Вы можете реализовать эту функцию, добавив свой код в

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

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

Добавьте пользовательскую функциональность (например, отображение Заголовка жирным шрифтом для непрочитанного) в

- (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.

}
...