UITableView не может перезагрузить данные из CustomCell

У меня есть UITableView с CustomCells. Это список избранного, и в каждой ячейке CustomCell есть звездочки. Поэтому, если я снова нажму на зажженные звезды, они исчезнут и будут удалены из списка свойств, называемого fav.plist.

Но когда я нажимаю на зажженные звезды, они не исчезают. Я не могу перезагрузить данные в списке избранного из CustomCell.m. ЧТОБЫ исчезнуть данные, которые я нажал на звездочку, мне нужно снова перейти к просмотру. Это единственный способ перезагрузить данные.

Как я могу перезагрузить данные после нажатия на звездочку, оставаясь при этом в том же виде?

Вот часть моего кода CustomCell.m, где находится список избранного (UITableView для списка — favView, plist — fav.plist):

 @property (nonatomic, retain) NSMutableArray *favList; 

  //First I find the item from plist which one will be removed from fav.plist.
    NSString *path_fav = [[self documentsDirectory] stringByAppendingPathComponent:@"fav.plist"];
    self.favList = [[NSMutableArray alloc] initWithContentsOfFile:path_fav]; 
    for (NSInteger i=0; i<[self.favList count];i++) {
        d = [self.favList objectAtIndex:i];
        NSString *code=[d objectForKey:@"CODE"];
        NSComparisonResult res=[code compare:self.cityLabel.text];
        if(res==NSOrderedSame){
            //removing from the fav.plist
            [self.favList removeObjectAtIndex:i];
            //Here I try to reload the data for the UITableView called favView
            //In Favorite.m is my UITableView called favView
            NSString *path = [[self documentsDirectory]
                              stringByAppendingPathComponent:@"fav.plist"];                
            [self.favList writeToFile:path atomically:TRUE];
            Favorite *favController =[[Favorite alloc]init];
            [favController.favView reloadData];
            [favController.favView reloadInputViews];

        }
    }

Вот часть моего кода Favorite.m:

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

    static NSString *cellID = @"cellid";

    CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:cellID ];
    if (cell == nil)
    {
        cell = (CustomCell*)[[[NSBundle mainBundle]
                              loadNibNamed:@"CustomCell" owner:nil options:nil]
                             lastObject];
    }

    NSDictionary *d = [self.favList objectAtIndex:indexPath.row];
    cell.nameLabel.text = [d objectForKey:@"NAME"];
    cell.cityLabel.text = [d objectForKey:@"CODE"];
    cell.index= [NSString stringWithFormat:@"%d",indexPath.row];
    cell.indexPath = indexPath;

    NSString *starName;
    if([[d objectForKey:@"FAV"] intValue]==0){
        starName=@"star.png";
    }else{
        starName=@"starb.png";
    }

    [cell.self.starbtn setImage:[UIImage imageNamed:starName] forState:UIControlStateNormal];

    if((indexPath.row % 2) ==0)
        cell.contentView.backgroundColor=[UIColor colorWithRed:241/256.0 green:237/256.0 blue:237/256.0 alpha:1.0];
    CGSize maxSize = CGSizeMake(320/2, MAXFLOAT);
    CGSize nameSize = [cell.nameLabel.text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:maxSize lineBreakMode:NSLineBreakByWordWrapping];
    if(nameSize.height>=72)
        nameSize.height=63;
    else
        nameSize.height=38;
    cell.nameLabel.frame =CGRectMake(80, 0, 213, nameSize.height);
    return cell;

}

person e.ozmen    schedule 28.08.2013    source источник


Ответы (2)


Вы реализовали метод

(void) tableView: (UITableView *) tableView didSelectRowAtIndexPath:

Если да, то в этом методе выполните удаление и перезагрузку.

person Dhanunjay Kumar    schedule 28.08.2013
comment
Но я могу сделать удаление только в CustomCell. И я не выбираю ячейку, я только нажимаю кнопку в CustomCell. - person e.ozmen; 28.08.2013
comment
Вы вызываете метод [YourTableView reloadData]; в CustomCell он перезагрузит данные. - person Dhanunjay Kumar; 28.08.2013
comment
попробуйте с одноэлементным объектом вместо выделения каждый раз Favorite *favController =[[Favorite alloc]init]; Возьмите общий контроллер, тогда он должен работать. - person Dhanunjay Kumar; 28.08.2013

Вы не можете перезагрузить ячейку из самой себя. Насколько я понял ваш вопрос, вам необходимо реализовать протокол делегата для вашей ячейки. Когда звездочка нажата, вызовите метод для вашей кнопки в customcell.m, который удалит звездочку из файла plist и сделает другие вещи. Затем вызовите метод для делегата (вашего представления), чтобы перезагрузить эту ячейку. Если вы не понимаете, я могу привести пример.

person NightFury    schedule 28.08.2013