2016-12-04 19 views
0

У меня есть tableView. Если я нажму на ячейку, он начнет загружать файл с анимацией UIActivityIndicator. После завершения загрузки появляется галочка (файл существует), и пользователь может перейти к следующему контроллеру. Необходимо, чтобы после перехода к следующему контроллеру и возврата обратно все галочки исчезли. Как это сделать?Удалить галочку

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: [NSString stringWithFormat:@"Cell%d", indexPath.row] forIndexPath:indexPath]; 
if (indexPath.row == 1){ 
if (!fileExists) { 
     [_spinner startAnimating]; 
    } 
    if (fileExists) { 
cell.accessoryView = nil; 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
    } 

    if (indexPath.row == 2){ 
if (!fileExists1) { 
     [_spinner1 startAnimating]; 
    } 

     if (fileExists1) { 
      cell.accessoryView = nil; 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
    } 
} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (indexPath.row == 1) { 

if (!fileExists) { 
_spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
_spinner.frame = CGRectMake(0, 0, 24, 24); 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
cell.accessoryView = _spinner; 
tableView cellForRowAtIndexPath:indexPath].accessoryView = _spinner; 
[_spinner startAnimating]; 

if (fileExists) { 
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 

} 
} 
} 
} 
+0

Не могли бы вы добавить больше кода, например 'cellForRowAtindexPath' и' didSelectRowAtIndexPath'. –

+0

@user проверить ответ, это ваше требование? – aircraft

+0

@NiravD Я обновляю свой вопрос. Пожалуйста, проверьте. – user

ответ

1

Пополните свой TableView в viewWillAppear

+0

'- (void) viewWillAppear: (BOOL) анимированный { [self.tableView reloadData]; } 'Я добавляю код, но он не работает – user

+0

еще раз проверьте свой объект tableview, заданное соединение или нет. – Himanth

+0

Я обновляю свой вопрос. Пожалуйста, проверьте. – user

0

Проверьте результат:

The result

Последующий мой код:

#import "ViewController.h" 

@interface ViewController()<UITableViewDelegate, UITableViewDataSource> 

@property (weak, nonatomic) IBOutlet UITableView *tableView; 

@property (nonatomic, strong) NSIndexPath *sel_indexPath; // selected indexpath 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    // cancel the checkmark 

    if (self.sel_indexPath) { 

     [self.tableView reloadData]; 
    } 

} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 


} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 


    return 5; 
} 

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId"]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellId"]; 

    } 

    cell.accessoryType = UITableViewCellAccessoryNone; 

    cell.textLabel.text = @"cell title"; 

    return cell; 
} 

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

    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 

    self.sel_indexPath = indexPath; 
    [self performSegueWithIdentifier:@"VC1GotoVC2" sender:self]; 
} 

@end 
+0

Я обновляю свой вопрос. Пожалуйста, проверьте. Если я использую 'UITableViewCellAccessoryNone' в' cellForRowAtIndexPath', это не работает. Внешний вид галочки – user

+0

@user Вы имеете в виду didselectrow, а не push nextcontroller прямо сейчас? – aircraft

+0

Я обновляю свой вопрос. Пожалуйста, проверьте. – user

0

Если fileExists, перезагрузите tableView в viewWillAppear. Используйте модель для маркировки ячейки fileExists.

@interface CheckMarkModel() 

@property (assign, nonatomic,get=isFileExists) BOOL fileExists; 

@end 

@implementation CheckMarkModel 

@end 

@interface ViewController()<UITableViewDelegate, UITableViewDataSource> 

@property (strong, nonatomic) NSIndexPath selectIndexPath; // select IndexPath 

@property (strong, nonatomic) NSMutableArray *dataArrM; // save select cell 
@end 

@implementation ViewController 

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    // your cell count 
    NSInteger cellCount = ; 
    _dataArrM = [NSMutableArray array]; 
    for (int i = 0; i < cellCount; ++i) 
    { 
     CheckMarkModel *model = [CheckMarkModel new]; 
     [_dataArrM addObject:model]; 
    } 
    // reload 
    [tableView reload]; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId"]; 
    //.... 
    CheckMarkModel *model = _dataArrM[indexPath.row]; 
    cell.accessoryType = (model.isFileExists) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; 

    return cell; 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (!self.isFileExists) 
    { 
     _selectIndexPath = indexPath; 
     [self downloadFile]; 
     [self tableView:tableView didDeselectRowAtIndexPath:indexPath]; 
    }else { 
     // move to the next controller 
    } 

} 
- (void)downloadFile { 
    // download action ... 

    //download success 
    if (fileExists) { 
     CheckMarkModel *model = _dataArrM[_selectIndexPath.row]; 
     model.fileExists = YES; 
     [tableView reloadRowsAtIndexPaths:@[_selectIndexPath] withRowAnimation:UITableViewRowAnimationNone];  
    } 
} 
@end 
+0

Я обновляю свой вопрос. Пожалуйста, проверьте. – user

 Смежные вопросы

  • Нет связанных вопросов^_^