在TableView自定义单元格中刷新数组

时间:2016-02-04 08:45:19

标签: ios objective-c arrays uitableview

我有一个ViewController,它有一个用Custom Cells生成的TableView。每个Custom Cell都有一个NSDictionary,它可以生成很少的数组。

我希望找到使用[myArray replaceObjectAtIndex:... withObject:...] 指向TableView 中特定单元格的自定义单元格中替换一个数组的方法,前提是我已经知道indexPath 包含该数组的那个单元格。

我必须以某种方式表示Custom Cell indexPath,到达那里并刷新数组。

有没有办法在Objective-C中完成任务?

4 个答案:

答案 0 :(得分:0)

如果您知道在每个自定义单元格不同的情况下要更改的单元格的indexPath,则可以使用cellForRowAtIndexPath调用获取单元格引用。

但我强烈建议通过使用单元格位置作为参考来更改数据模型。由于表视图重用单元格,因此最终会出现意外结果。您应该改变您的表模型,然后重新加载表,或者只重新加载已更改的特定单元格。

答案 1 :(得分:0)

获得单元格的indexPath后,您可以执行以下操作:

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPathOfYourCell, nil] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates]; 

答案 2 :(得分:0)

您可以选择重新加载UITableView

中的UIViewController

说你的桌面视图是这样的

    UITableView *tableView

案例1:重新加载整个表格视图 appledoc

[tableView reloadData];

案例2:重新加载某个部分内的所有行 appledoc

[tableView reloadRowsAtIndexPaths:yourIndexPath withRowAnimation: UITableViewRowAnimationNone];

案例3:一次重新加载多个部分 appledoc

tableView reloadSections:yourIndexPathSet withRowAnimation:UITableViewRowAnimationNone];

NB ::必须在 mainThread / gui线程中执行以下任何操作。

答案 3 :(得分:0)

解。

首先,我们需要确保每个自定义单元格都有@property NSInteger cellIndex;。当tableView填充自定义单元格时,请务必添加cell.cellIndex = indexPath.row;。这样每个Custom Cell都会使它等于tableView行。

其次,在父viewController中进行更改时,在更新结束时我们会发布通知[[NSNotificationCenter defaultCenter] postNotificationName:@"refreshCollectionView" object:self];

第三,在Custom Cell中,我们会收听该通知: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshCollect) name:@"refreshCollectionView" object:nil];。触发方法(也包含在自定义单元格中)参考cellIndex:

-(void) refreshCollect {

    if (cellIndex == [[[NSUserDefaults standardUserDefaults] valueForKey:@"cellIndex"] intValue]) {

       NSURL *newsImgURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.website.com/core/functions/ios/page.news.image?news_id=%@", [[NSUserDefaults standardUserDefaults] valueForKey:@"newsID"]]];
       NSData *newsImgData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:newsImgURL] returningResponse:nil error:nil];

       newsImgDict    = [NSJSONSerialization JSONObjectWithData:newsImgData options: NSJSONReadingMutableContainers error:nil];
       newsImgID2     = [NSMutableArray arrayWithArray: [newsImgDict valueForKey:@"image_id"]];
       newsImgTime    = [NSMutableArray arrayWithArray: [newsImgDict valueForKey:@"timestamp"]];
       newsIDImg      = [NSMutableArray arrayWithArray: [newsImgDict valueForKey:@"news_id"]];
       newsImgDescr   = [NSMutableArray arrayWithArray: [newsImgDict valueForKey:@"description"]];
       newsImgExt2    = [NSMutableArray arrayWithArray: [newsImgDict valueForKey:@"ext"]];

} } 

在我的情况下,我有NSDictionary,它只为那个特定的自定义单元重建一些数组。