如何将一个数组的tableview数据重新加载到另一个数组?
Posted
技术标签:
【中文标题】如何将一个数组的tableview数据重新加载到另一个数组?【英文标题】:How to reload tableview data one array to another array? 【发布时间】:2015-09-04 06:36:26 【问题描述】:我正在尝试使用双 NSMutableArray
值创建单个 table view
。现在我维护UISegmentcontrol
第一个按钮单击以加载第一个NSMutableArray
数据。第二个按钮点击加载第二个NSMutableArray
数据值(点击第二个按钮后第一个数据不应该显示)。
NSMUtableArray *firstarray = [First values];
NSMUtableArray *secondarray = [second values];
-(void)segmentedControlValueDidChange:(UISegmentedControl *)segment
switch (segment.selectedSegmentIndex)
case 0:
//action for the first button (Current)
//want to load first array data into table
break;
case 1:
//action for the first button (Current)
//want to load second array data into table
break;
【问题讨论】:
【参考方案1】:创建 1 个数组来保存表格的数据,因此您不必在 UITableView 的每个委托方法中检查(使用 if,...):
NSMutableArray * arrTableData;
-(void)segmentedControlValueDidChange:(UISegmentedControl *)segment
switch (segment.selectedSegmentIndex)
case 0:
arrTableData = firstarray;
[tableView reloadData];
break;
case 1:
arrTableData = secondarray;
[tableView reloadData];
break;
将arrTableData
用于UITableView
的代表:numberOfRowsInSection
、cellAtIndex
...
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return arrTableData.count;
【讨论】:
但我第一次做什么?在选择按钮之前,我需要列出 defaulty firstarray data@anthu 是的,您将通过在某处指定arrTableData
= firstarray
来选择哪个是默认值。
设置选中段的时候也可以设置数组的初始值
嗨。我在哪里可以为默认 arrTableData = firstarray @anthu 分配这个
viewDidLoad
,或者你第一次得到firstarray
的地方,或者在你第一次加载表格之前。【参考方案2】:
您可以使用枚举来检查您按下了哪个按钮。对于按钮一,将枚举值设置为 1,对于按钮二,将枚举值设置为 2。在表视图委托方法中,您可以检查当前选定的枚举并返回适当的值。
例如:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
NSInteger count = 0;
if(m_choice == 1)
count = [firstarray count];
else if(m_choice == 2)
count = [secondarray count];
return count;
对其他表格视图方法也这样做。
【讨论】:
虽然这会起作用,但它有很多重复的代码,而另一个答案是一种更优雅的方法【参考方案3】:通过以下方式实现您的UITableViewDelegate
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (mySegmentContorll.selectedSegmentIndex == 0)
// Draw Cell content with data taken from first array, data = firstarray[indexPath]
else if (mySegmentContorll.selectedSegmentIndex == 1)
// Draw Cell content with data taken from second array, data = secondarray[indexPath]
当分段控制发生变化时也调用[tableView reloadData];
。
【讨论】:
【参考方案4】:创建一个布尔变量,比如 isLoadFirst 然后在您的以下代码中
-(void)segmentedControlValueDidChange:(UISegmentedControl *)segment
switch (segment.selectedSegmentIndex)
case 0:
isFirstLoad = YES;
[yourTableView reloadData];
//action for the first button (Current)
//want to load first array data into table
break;
case 1:
//action for the first button (Current)
//want to load second array data into table
isFirstLoad = NO;
[yourTableView reloadData];
break;
现在在你的
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
if (isFirstLoad)
return firstArrayCount;
else
return secondArrayCount
同样的检查
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
【讨论】:
谢谢你,Arsian。它也很好的答案!以上是关于如何将一个数组的tableview数据重新加载到另一个数组?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 为啥我的应用程序在重新启动之前不会将数据加载到 tableview 中?
(自动)在 tabbar1 中更新数组后,在 Tableview(tabbar2) 上重新加载数据(无需更改 tabbars)