2013-08-28 1 views
0

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

Но когда я нажимаю освещенные звезды, они не исчезают. Я не могу перезагрузить данные в списке избранного из 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]; 

     } 
    } 

Вот одна часть из моих любимых. м код:

- (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){ 
     [email protected]"star.png"; 
    }else{ 
     [email protected]"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; 

} 

ответ

0

ли у реализации метода

(аннулируются) Tableview: (UITableView *) Tableview didSelectRowAtIndexPath:

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

+0

Но я могу сделать удаление только в CustomCell. И я не выбираю Cell, я просто нажимаю кнопку в CustomCell. –

+0

Вы вызываете метод [YourTableView reloadData]; в CustomCell он перезагрузит данные. –

+0

попробуйте использовать одноэлементный объект, вместо того, чтобы выделять каждый раз Favorite * favController = [[Favorite alloc] init]; Возьмите общий контроллер, тогда он должен работать. –

0

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