Obj-C-展开选定的单元格,未选定时折叠

时间:2018-07-31 22:31:08

标签: ios objective-c uitableview

我正在尝试做到这一点,以便当我的用户点击一个单元格时,它从高度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];


}

2 个答案:

答案 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;

}

希望有帮助!