我正在尝试做到这一点,以便当我的用户点击一个单元格时,它从高度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];
}
答案 0 :(得分:0)
声明属性
@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
答案 1 :(得分:0)
@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;
}
希望有帮助!