如何获取 NSMutableArray 的 indexPath 值?
Posted
技术标签:
【中文标题】如何获取 NSMutableArray 的 indexPath 值?【英文标题】:How to get indexPath value to the NSMutableArray? 【发布时间】:2014-02-26 06:10:54 【问题描述】:我必须得到 NSMutableArray 的 IndexPath 值。当当时选择特定单元格时,我必须执行操作,它的 IndexPath 存储在 NSMutableArray 中并且特定单元格高度正在增加。当我在那个时候再次按下那个单元格时,特定的单元格高度正在减小。这怎么可能,我必须提出什么样的条件?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"%@",indexPath);
selectIndexPathCell = indexPath;
NSIndexPath *previousSelectedIndexPath = selectIndexPathCell;
selectIndexPathCell = indexPath;
if (previousSelectedIndexPath)
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:previousSelectedIndexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:selectIndexPathCell]
withRowAnimation:UITableViewRowAnimationAutomatic];
self.selectedRow = sections_main[indexPath.section][@"content"][indexPath.row];
[tblPeople beginUpdates];
[tblPeople endUpdates];
- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if(selectIndexPathCell != nil && [selectIndexPathCell compare:indexPath] == NSOrderedSame)
return 80;
else
return 60.0;
【问题讨论】:
【参考方案1】:据我了解,您需要基于标准的表格视图单元格高度。您可以通过将相应单元格的rowIndex
保存在array
中来管理它,并且通过使用reloadData
函数高度可以在heightForRowAtIndexPath
委托下进行管理,单元格高度将根据数组值进行更改。看看我的建议here。
希望对你有帮助!
编辑:(未经测试的版本给你一个想法)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if(![arrayOfExpandedCellIndexes containsObject:[NSNumber numberWithInteger:indexPath.row]])
[arrayOfExpandedCellIndexes addObject:[NSNumber numberWithInteger:indexPath.row]]; // add if it does not exist
else
[arrayOfExpandedCellIndexes removeObject:[NSNumber numberWithInteger:indexPath.row]]; // remove if it exists
[tableView reloadData]; // reload data so height would adjust in `heightForRowAtIndexPath`
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if([arrayOfExpandedCellIndexes containsObject:[NSNumber numberWithInteger:indexPath.row]])
return EXTENDED_CELL_HEIGHT; // Macro : #define EXTENDED_CELL_HEIGHT 230.0f
else
return NORMAL_CELL_HEIGHT; // Macro : #define NORMAL_CELL_HEIGHT 100.0f
假设arrayOfExpandedCellIndexes
是NSMutableArray
以维护索引。
【讨论】:
当第一次用户点击单元格时,我必须使单元格展开和收缩,而第二次用户在单元格收缩时点击该单元格。仅在用户选择的特定单元格上。所以,我必须通过 NSMutableArray 来管理它。如何将选定的索引存储在 NSMutableArray 上并重新加载特定的 Cell。 第一件事particular cell
不能重新加载,使用委托(如果自定义单元格)从 NSMutableArray 添加/删除索引并调用 [yourTableView reloadData]
所以当数据重新加载时它需要正确的高度。所以在开始时单元格索引不会在数组中,一旦用户点击单元格didSelectRowAtIndexPath
将调用存储值在数组中如果不存在,如果存在则删除。希望现在清楚。
array1 = [[tableView cellForRowAtIndexPath:indexPath] mutableCopy];现在我得到了特定索引路径的数据?
是的,当单击 [didSelectRowAtIndexPath] 时..现在我该怎么办。
是的,我已经看到了..但是我怎样才能获得以前选择的索引路径?【参考方案2】:
Take a global variable ex: Int selectedIndex; and now in didselectrow write this
-(void)viewDidLoad
[super viewDidLoad];
selectedIndex=50; // please assign it as your arraycount+1; which you are using to display on tableview
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if(selectedIndex==indexPath.row)
// if this is true you can do decrease your cell height
selectedIndex=50; // please assign it as your arraycount+1;
else
// user can select one row and he can select another row without minimizing the previous one so you need to minimize the previous and increase new one. by using selectedIndex decrease cell height and by using indexPath.row increase height of cell
selectedIndex=indexPath.row;
[tableview reload];
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if(selectedIndex==indexPath.row)
return 60;
else
return 30;
【讨论】:
我应该在 heightForRowAtIndexPath 中写什么?是否有任何代码检查或其他 @Ankit 你现在面临什么问题,你删除了arrayOfExpandedCellIndexes 我的细胞仍然没有扩大和缩小。 @Ankit 答案已更新,我已经测试过它正在工作,请检查并告诉我 非常感谢它现在正在工作......非常感谢您。以上是关于如何获取 NSMutableArray 的 indexPath 值?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NSMutableArray 中获取货币总和 [重复]