我有一个带有一个部分的UITableView,如下所示:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(self.units){
return [self.arrayTwo count];
}else{
return [self.arrayOne count];
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 75.0;
}
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[UIView alloc] init];
NSArray *itemArray = [NSArray arrayWithObjects: @"One", @"Two", nil];
UISegmentedControl *control = [[UISegmentedControl alloc] initWithItems:itemArray];
[control setFrame:CGRectMake(50.0, 10.0, 220.0, 30.0)];
[control setSegmentedControlStyle:UISegmentedControlStylePlain];
[control setEnabled:YES];
[control setTintColor:[UIColor purpleColor]];
[control addTarget:self action:@selector(testing:) forControlEvents:UIControlEventValueChanged];
[control setSelectedSegmentIndex:self.units];
UILabel *label = [[UILabel alloc] init];
[label setFrame:CGRectMake(50.0, 45.0, 220.0, 30.0)];
[label setText:@"String"];
[label setTextAlignment:NSTextAlignmentCenter];
[headerView addSubview:control];
[headerView addSubview:label];
[headerView setBackgroundColor:[UIColor whiteColor]];
return headerView;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
if(self.units == 0){
cell.textLabel.text = [NSString stringWithFormat:@"%@", [self.arrayOne objectAtIndex:indexPath.row]];
}else{
cell.textLabel.text = [NSString stringWithFormat:@"%@ kg", [self.arrayTwo objectAtIndex:indexPath.row]];
}
return cell;
}
根据NSUserDefaults变量的值确定self.units
。调用UISegnmentedControl的方法是:
- (void) testing:(id)sender {
int selected = [sender selectedSegmentIndex];
[self.userDefaults setInteger:selected forKey:@"SSTestVariable"];
[self.userDefaults synchronize];
}
现在这一切都很好用,但我想添加到testing
方法的是UITableView重新加载并显示UISegmentedControl中所选项目的数据。重新加载可以是瞬时的,也可以是淡出和淡入,或其他一些动画。没关系。
我尝试过放置
[self.tableView reloadData];
在testing
方法结束时,但这并不能解决问题。基本上,我需要再次浏览cellForRowAtIndexPath
,使用相应的数据加载单元格textLabels,然后重新加载表格视图。
提前致谢。
请注意:我已经专门为此线程更改了方法和变量名称。我不经常做一些命名的事情" arrayOne"或"测试,"所以请跳过命名约定评论。