我基本上有两个数组,我想一次在TableView中显示一个数组:
@property (nonatomic, strong) NSArray *items;
@property (nonatomic, strong) NSArray *historicItems;
items
或historicItems
应显示在TableView中,具体取决于所采取的操作。
选择要显示的数组的正确方法是什么?要在TableView中显示的单元格是使用cellForRowAtIndexPath:indexPath
方法准备的。
答案 0 :(得分:2)
在您的课程中添加BOOL
,并在您的操作中将其设置为true或false,
//define in your .h or wherever you want to declare
BOOL flag;
并且要么在你的行动中使其成为真或假。而不是CellForRowAtIndexPath
根据你的行动选择数据源。
If (flag){
cell.textLabel.text=[items objectAtIndex:IndexPath.row];
}
else{
cell.textLabel.text=[historicalItems objectAtIndexPath.row];
}
并且您还必须使用相同的if else语句在numberofcell
函数中返回来自这两个数据源的单元格数。
答案 1 :(得分:2)
您可以添加bool变量并根据所采取的操作进行更改。在表视图中,数据源方法根据bool变量执行填充,例如:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (action == YES) //your first action
return items.count;
else //second action
return historicItems.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Your code to init cell here
.......
if (action == YES) //your first action
{
cell.textLabel.text = items[indexPath.row];
}
else //second action
{
cell.textLabel.text = historicItems[indexPath.row];
}
return cell;
}
希望这个帮助
答案 2 :(得分:2)
这样做:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (showItems)
{
return items.count;
}
else
{
return historicItems.count;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
if (showItems)
{
cell.textLabel.text = [items objectAtIndex:indexPath.row];
}
else
{
cell.textLabel.text = [historicItems objectAtIndex:indexPath.row];
}
return cell;
}
答案 3 :(得分:2)
取决于您可以选择使用所需项目重新加载tableview的操作。使用任何布尔变量来跟踪选择的动作。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger count;
if (isItems == YES) //your first action
count = items.count;
else {
count = historicItems.count;
}
return count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = dequeueReusableCellWithIdentifier:@"Cell"];
if (isItems == YES)
{
cell.textLabel.text = items[indexPath.row];
}
else
{
cell.textLabel.text = historicItems[indexPath.row];
}
return cell;
}
答案 4 :(得分:1)
第一种方式
如果两个数组包含的相同,则采用datasourcearray。然后copy
将适当的数组数据放入按钮操作的datasourcearray中。
datasourcearray = [self.items copy];
[yourtable reloadData];
onther数组的类似操作。
第二路
如果两个数组包含不同,则取一个布尔值(假设为isFirstSenarioFlag
)
按下按钮时切换值YES或NO。检查每个数据源中的标志值和委托方法,并在重新加载数据方法后加载表的相应数据。
首先,您不需要在每个表数据源和委托方法中检查设置标志值aur检查数据源。此外,它还可以减少程序的运行时间复杂性(切换每个方法),也便于管理内存。 :)