在UITableView中重新加载部分

时间:2015-09-02 11:35:35

标签: ios objective-c uitableview

我正在编写一个应用程序,通知用户何时服用他/她的药物。页面顶部的标签显示日期,tableView将填充医疗名称和特定日期需要的时间。现在根据当天要服用的药物数量来填充这些部分。因此,部分的数量随着时间的推移而动态变化;计划在该特定日期服用一种药物。每当用户服用药物时,它都会作为变量存储在数据库中,变为"1",否则保持"0"

此外,我知道我需要在当天重新加载特定药物的部分。

现在问题是如何实现这一目标?如何重新加载特定部分?

for(NSManagedObject *mo in secondEntityArray) {
    NSDate *temp1 = [mo valueForKey:@"date"];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSString * temp2 = [dateFormatter stringFromDate:temp1];
    NSDate *temp3 = [dateFormatter dateFromString:temp2];
    NSDate * temp4 = [dateFormatter dateFromString:_dateLabel.text];
    if([temp3 compare:temp4] == NSOrderedSame) {
        if([[mo valueForKey:@"isNotificationFired"] isEqualToString:@"1"] && [[mo valueForKey:@"repeatDays"] isEqualToString:@"Everyday"]) {
            //Reflect changes in tableView section
        }
    }
}

6 个答案:

答案 0 :(得分:53)

Swift 3

NSIndexSet没什么特别的

tableView.reloadSections([1, 2, 3], with: .none)

这只是一个阵列。疯狂。

答案 1 :(得分:8)

UITableView支持重新加载数据的功能很少。请参阅文档的Reloading the Table View部分。

  • reloadData
  • reloadRowsAtIndexPaths:withRowAnimation:
  • reloadSections:withRowAnimation:
  • reloadSectionIndexTitles

此外,请参阅this similar thread,其中的一部分:

NSRange range = NSMakeRange(0, 1);
NSIndexSet *section = [NSIndexSet indexSetWithIndexesInRange:range];                                     
[self.tableView reloadSections:section withRowAnimation:UITableViewRowAnimationNone];

此外,没有必要重新加载特定部分,您只需调整数据集并调用[tableView reoadData],它将仅加载可见单元格。 doc的一部分:

  

调用此方法重新加载用于构造的所有数据   表,包括单元格,节头和页脚,索引数组和   等等。为了提高效率,表视图仅重新显示那些行   是可见的。如果表因此而缩小,它会调整偏移量   重装。

答案 2 :(得分:1)

使用此方法重新加载您的部分

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

答案 3 :(得分:1)

以下是方法,您可以通过不同方式传递部分详细信息

[self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:1] withRowAnimation:NO];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];

重新加载特定部分可以提高表视图的性能,同时还可以避免一些问题,例如在视图中浮动/移动自定义页眉。 因此,尽可能尝试使用reloadSection而不是relaodData

答案 4 :(得分:1)

更新以便在Swift中快速使用(从2.2开始)

//where 0 is the section you want to reload
tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: .None)

答案 5 :(得分:1)

您也可以使用它 -

array_unique - 您要重新加载的UITableView部分。

$data_ar = array();//your array here;
$temp_ar = array();

foreach($data_ar as $value)
{
    $tempCheck = 0;
    foreach($temp_ar as $val)
    {
        if($val['uc_um_id'] == $val['uc_um_id']) // whatever the item value you want to check wheather its uc_um_id or um_name
        {
            $tempCheck = 1;
        }
    }
    if($tempCheck === 0)
    $temp_ar[] = $value;
}
var_dump($temp_ar);