iOS - 在UISegmentedControl上重新加载tableView更改

时间:2014-04-02 22:32:36

标签: ios objective-c uitableview uisegmentedcontrol reloaddata

我有一个带有一个部分的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"或"测试,"所以请跳过命名约定评论。

0 个答案:

没有答案