【问题标题】:Split data in UITableView by using UISegmentedControl使用 UISegmentedControl 在 UITableView 中拆分数据
【发布时间】:2014-01-31 07:42:54
【问题描述】:

我有一个 TableView。它使用 JSON 从网络接收数据并将数据填充到单元格中。另外,我在 TableView 上方有 SegmentedControl。我必须了解如何通过单击 segmentedControl 的每个段来显示不同的数据(通过“类型”参数)。

一切正常(我的代码如下)。但我想通过在数据数组中使用'type'参数将数据拆分到每个段

我的 JSON 代码:

[{
    "title":"message one",
    "subtitle":"sub one",
    "type":1
},{
    "title":"message two",
    "subtitle":"sub two",
    "type":2
}, {
    "title":"message three",
    "subtitle":"sub three",
    "type":2
}, {
    "title":"message four",
    "subtitle":"sub four",
    "type":3
}]

分段控制:

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"All", @"Present", @"Missing", nil]];
    [segmentedControl addTarget:self action:@selector(segmentedControlChanged:) forControlEvents:(UIControlEventValueChanged)];
    segmentedControl.frame = CGRectMake(0, 0, 100, 30);
    segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
    segmentedControl.selectedSegmentIndex = 0;
    [self.tableView addSubview:segmentedControl];

segmentedControlChanged 方法

- (void) segmentedControlChanged:(id)sender
    {
        UISegmentedControl* segmentedControl = (UISegmentedControl*)sender;
        segmentIndex = segmentedControl.selectedSegmentIndex; // segmentIndex defined in .h file
        [self.tableView reloadData];
    }

让我们展示一些单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    if(cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
    }

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    UILabel *titleField = (UILabel *)[cell viewWithTag:10];
    UILabel *subField = (UILabel *)[cell viewWithTag:11];

    titleField.text = [NSString stringWithFormat:@"%@", [[dataList objectAtIndex:indexPath.row] valueForKey:@"title"]];
    subField.text = [NSString stringWithFormat:@"%@", [[dataList objectAtIndex:indexPath.row] valueForKey:@"subtitle"]];

    switch (segmentIndex)
    {
        case 0:
            cell.backgroundColor = [UIColor brownColor];
            break;
        case 1:
            cell.backgroundColor = [UIColor whiteColor];
            break;
        case 2:
            cell.backgroundColor = [UIColor blueColor];
            break;
        default:
            break;
    }

    return cell;
}

谢谢你,对不起我的英语!

【问题讨论】:

    标签: ios iphone objective-c uitableview uisegmentedcontrol


    【解决方案1】:

    创建第二个属性来保存当前选定选项卡的过滤对象,然后将所有表格视图方法设置为从该数组中获取。

    声明属性:

    @property (strong, nonatomic) NSArray *filteredObjects;
    

    在您的segmentControlChanged: 方法中:

    self.filteredObjects = [self.dataList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"type == %d", segmentedControl.selectedSegmentIndex]];
    

    【讨论】:

    • 非常感谢!效果很好!但是你最后忘记了一个乡绅括号,我把这段代码放到了单一方法中。它将防止第一次数据加载和通过拉取重新加载时出错。再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多