我有一个表视图,我有两个数组。我的数组名为AllItems和SpecialItems。我使用段控制。我想如果段值是0 tableview加载AllItems数组,当更改段值和值是= 1比mytableview重载tada但SpecialItems数组。请你帮帮我吧。感谢。
答案 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文件中(或以编程方式)链接,并在选择阵列后重新加载表。
这种事实际上很容易做到。如果您遇到麻烦,我肯定会建议您逐步完成。在应用下一步之前,请确保每个步骤都有效:
那应该这样做