how do I expand cell in tableview dynamically?

后端 未结 3 1422
醉话见心
醉话见心 2021-01-25 22:28

I have only one cell with a button in a tableview. The cell height is defined in

tableView:tableView:heightForRowAtIndexPa         


        
相关标签:
3条回答
  • 2021-01-25 22:46

    Define a property and @synthesize it:

    @property (retain, nonatomic) NSIndexPath* selectedRowIndex;
    

    Override didSelectRowAtIndexPath and heightForRowAtIndexPath methods:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
        if(selectedRowIndex && indexPath.row == selectedRowIndex.row) {
    
            //[_yourTableView deselectRowAtIndexPath:indexPath animated:YES]; If you only want the cell to get bigger
            selectedRowIndex = nil;
    
        }
    
        else {  self.selectedRowIndex = [indexPath retain];   }
    
        [tableView beginUpdates];
        [tableView endUpdates];
    }
    
    - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    if (tableView == _yourTableView) {
    
    
        if(selectedRowIndex && indexPath.row == selectedRowIndex.row){
    
            return 80;
        }
    
        // Cell isn't selected so return single height
        return 40;
    
    }
    
    else return 0;
    }
    

    Because of the beginUpdates and endUpdates lines this should animate the cell height.

    0 讨论(0)
  • 2021-01-25 22:48

    Here is the documentation for UITableView Delegate. You need to set a delegate and set the function is - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath. Remember the return value is CGFloat, so return 80.0 instead of 80. Hope this helps.. Read more about other delegate functions in the documentation...

    0 讨论(0)
  • 2021-01-25 22:53

    When the button is pressed you should set a variable to a value that indicates it has been pressed, then call reloadData on your tableView. This will make tableView:heightForRowAtIndexPath to be called again.

    In tableView:heightForRowAtIndexPath check the variable that tells you if the button has been pressed or not and return 80 if it has been pressed

    0 讨论(0)
提交回复
热议问题