Obj-C - 展开选定的单元格,取消选中时折叠
Posted
技术标签:
【中文标题】Obj-C - 展开选定的单元格,取消选中时折叠【英文标题】:Obj-C - Expand selected cell, collapse when unselected 【发布时间】:2018-07-31 22:31:07 【问题描述】:我正在尝试这样当我的用户点击一个单元格时,它会从高度 70 扩展到 165,当他们选择另一个单元格时,我希望之前选择的单元格折叠,而新选择的单元格展开。看起来应该很简单,但是当我使用下面的代码时,某些单元格有时会保持扩展,导致事情重叠?我该如何解决这个问题?
注意:我的 tableviewcell xib 是 165h(因为我想在单元格展开时显示的数据位于它的下半部分)
ViewController.m
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if([indexPath isEqual:[tableView indexPathForSelectedRow]])
return 165.0;
return 70.0;
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[tableView beginUpdates];
[tableView endUpdates];
【问题讨论】:
【参考方案1】:@interface tableView ()
NSInteger value;
@property(weak, nonatomic) NSIndexPath *selectedIndexPath;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
value = 0;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if(value == 1)
value = 0;
else
value = 1;
[self.tableView beginUpdates];
_selectedIndexPath = indexPath;
[self.tableView endUpdates];
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if (indexPath == _selectedIndexPath && value == 1)
return 285;
else
return 120;
return 120;
希望有帮助!
【讨论】:
如果我的 xib 也设置为 70h,这将非常有效。也就是说,如果我希望标签出现在下拉部分中,我无法将我的 xib 设置为 165h 以使其正常工作。这对我来说没有意义,因为我应该如何在下拉列表的下半部分放置任何东西? 好吧,您需要在 xib 中获取单元格高度 = 165 并完成所有设计工作。在代码中,更改IMET 120 - > 70和285 - > 165.当代码运行时,它将将单元格的高度返回为70,但选择单元格时,它将返回高度为165 span> 试过了 - 出于某种原因,当我按照您上面所说的方式进行操作时(xib 在 165),即使没有选择它们,也会在 165 处返回一些选定的单元格:/ 嗯,这很奇怪,但它发生并且确实发生在我身上,我需要看到你的代码。如果方便,您可以将文件邮寄至 Hemant.garg@appcodeindia.com,或者您可以提供您的电子邮件 ID,我将向您发送一个虚拟项目【参考方案2】:声明一个属性
@property NSIndexPath*index;
//
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if(indexPath == self.index)
return 165.0;
return 70.0;
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
self.index = indexPath;
[tableView reloadData];
//
查看Demo
【讨论】:
当我实现这个并打开我的表格视图时,我的 4 个单元格中的两个已经展开了?当我最终将它们全部关闭时,由于某种原因,我的最后一个牢房一直在扩大...... 您可能遗漏了一些东西,请查看使用相同代码的附加演示以上是关于Obj-C - 展开选定的单元格,取消选中时折叠的主要内容,如果未能解决你的问题,请参考以下文章