如何使用段控制更改Tableview阵列

时间:2015-01-18 15:50:10

标签: ios objective-c arrays uitableview uisegmentedcontrol

我有一个表视图,我有两个数组。我的数组名为AllItems和SpecialItems。我使用段控制。我想如果段值是0 tableview加载AllItems数组,当更改段值和值是= 1比mytableview重载tada但SpecialItems数组。请你帮帮我吧。感谢。

3 个答案:

答案 0 :(得分:2)

我用表格标签解决了这个问题。

- (IBAction)segmentControlChanged:(UISegmentedControl *)sender {

if (sender.selectedSegmentIndex == 1) {
    mytable.tag = 1;
}
else 
{
    mytable.tag = 0;
}

[mytable reloadData];
}




- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{ 

   if(tableView.tag==1)
{

    return [specialItems count];
}

else

return [allItems count];


}

答案 1 :(得分:1)

您可以创建两个实现所有UITableViewDataSource方法的数据源类:一个用于AllItems,另一个用于SpecialItems。要在两者之间切换,请连接valueChanged操作。在调用的方法中,设置数据源并重新加载表视图。

- (void)valueChange:(UISegmentedControl *)sender
{
    if (/* condition for all items */) {
        self.tableView.dataSource = self.allItemsDataSource;
    } else {
        self.tableView.dataSource = self.specialItemsDataSource;
    }
    [self.tableView reloadData];
}

答案 2 :(得分:1)

我个人会创建一个从中加载数据的数组。把它放在你的实现中:

NSArray * _tableData

然后在你的viewDidLoad中为我们希望它开始的数组分配这个。

_tableData = [[NSArray alloc] initWithArray:allItems];

这最初会加载我们将始终看到的数据,因为段控件从索引0开始。我们必须在某处设置初始数据,以便tableView加载其中的一些数据。

然后设置行数,并从_tableData数组中选取cellForRowAtIndex

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _tableData.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell * cell = [tableView_ dequeueReusableCellWithIdentifier:bCell];

    // Here we use the specific array as we would normally

    return cell;
}

此步骤表示tableView将加载数组。即使数组为空,视图仍会加载,因为单元格数将为零。

现在在我们的值更改函数中,我们可以根据需要重置数组:

- (IBAction)segmentControlChanged:(UISegmentedControl *)sender {

    if (sender.selectedSegmentIndex == 1) {
        _tableData = allItems;
    }
    else {
        _tableData = specialItems;
    }

    [self.tableView reloadData];
}

您只需要确保更改的段控件在XIB文件中(或以编程方式)链接,并在选择阵列后重新加载表。

这种事实际上很容易做到。如果您遇到麻烦,我肯定会建议您逐步完成。在应用下一步之前,请确保每个步骤都有效:

  1. 使用两组数据单独加载tableView
  2. 确认段控件在单击时调用更改功能
  3. 那应该这样做