我想在没有reloaddata的情况下更新tableview中标签的文本。
我试试((uilabel *)[self.tableview viewWtihTag:10]).text = Newstring
但它不起作用。
这是对的吗?或者有另一种解决方案?
答案 0 :(得分:1)
使用此方法- (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
是正确的。但是,您应该跟踪每个单元格中每行中要加载的值,然后在用户滚动表格时每次重新加载行时访问它们。
以下是一个示例:
@interface ViewController ()<UITableViewDelegate, UITableViewDataSource>
@property NSMutableArray *labelValueListForSection0;
@property NSMutableArray *labelValueListForSection1;
@property NSMutableArray *labelValueListForSection2;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
_labelValueListForSection2 = [[NSMutableArray alloc] initWithObjects:@"value1", @"value2", @"value3", nil];
}
- (void)changeAnItem
{
[_labelValueListForSection2 setObject:@"ChangedValue" atIndexedSubscript:1];
[_table reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:1 inSection:2]] withRowAnimation:UITableViewRowAnimationNone];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"SimpleTableItem";
UITableViewCell *tableCell = [tableView dequeueReusableCellWithIdentifier:identifier];
if(tableCell == nil)
{
tableCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
switch(indexPath.section)
{
case 0:
tableCell.textLabel.text = @"Test";
break;
case 1:
tableCell.textLabel.text = @"Test";
break;
case 2:
tableCell.textLabel.text = [_labelValueListForSection2 objectAtIndex:indexPath.row];
break;
case 3:
tableCell.textLabel.text = @"Test";
break;
case 4:
tableCell.textLabel.text = @"Test";
break;
default:
break;
}
return tableCell;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 5;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
@end
正如您所看到的,我正在跟踪每一行的值,并将它们存储在数组中。在我的例子中,我为特定部分的每一行都有一个值数组。这样当这个方法
时- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
调用,它将获取应分配给该行的值。
如果您不知道,iOS正在重复使用每个表格单元以获得更好的性能和更好的内存管理。因此,如果遇到诸如为什么我的某个行的值在其他行中重复的情况,那是因为tableCell的实例在其他行中重用。
因此,为了确保每次加载一个单元格,该值应该是正确的。您必须跟踪每一行的值,并在每次重新加载时将其重新分配给该单元格。
希望这可以帮助您解决问题。
答案 1 :(得分:0)
尝试重新加载表格的特定单元格...
NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0];
[myUITableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:rowToReload, nil] withRowAnimation:UITableViewRowAnimationNone];
添加代码以更改cellForRowAtIndexPath:
答案 2 :(得分:0)
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
使用此方法。这有助于您解决问题