当文本字段开始编辑时,增加单元格的高度

时间:2017-01-25 07:29:46

标签: ios swift xcode uitableview row-height

我有一个tableview,其中一个单元格包含textfieldbutton。仅当button变为活动状态时,我才想显示包含textfield的区域。

因此,我希望提供不同的height,以便textfield仅可见,当textfield变为有效时,我想增加height of the tableviewcell以显示button。请帮助。

我的手机就是这样的。

enter image description here

如果未选择文本字段,我希望它显示为:

enter image description here

当选择文本字段时,我希望它看起来像: enter image description here

它与“在UITableView中使用自动布局动态单元格布局和可变行高”无关,因为我想根据所选的文本字段确定高度。

1 个答案:

答案 0 :(得分:2)

所以基本上你需要更新特定的单元格并增加它的高度。为此,您需要实现UITextFieldDelegate方法,以确保在文本字段进入编辑模式时收到通知。

此外,您需要维护当前单元格的indexPath以增加特定单元格的高度。

@property(nonatomic, strong) NSIndexPath *selectedIndexPath;

将其初始值设为nil

实施委托方法

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    UITableViewCell *cell = (UITableViewCell*)textField.superview;
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    if( indexPath != nil) //Returns nil if cell is not visible
    {
        if( self.selectedIndexPath != nil )
        {
            //We need to reload two cells -  one to hide UIButton of current cell, make visible the new UIButton for which textfield is being currently edited
            NSIndexPath *previousIndexPath = self.selectedIndexPath;
            self.selectedIndexPath = indexPath;
            [self.tableView reloadRowsAtIndexPaths:@[indexPath, previousIndexPath] withRowAnimation:UITableViewRowAnimationNone];
        }
        else
        {
            //Reload the cell to show the button
            self.selectedIndexPath = indexPath;
            [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
        }
    }
}

重新加载单元格后,请确保使用UITableViewDelegate方法

更新高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if( self.selectedIndexPath && [indexPath compare:self.selectedIndexPath] == NSOrderedSame)
    {
        return kHeightWithButton; //assuming its some constant defined in the code
    }
    return kHeightWithoutButton;
}

另外,根据您处理UITableViewCell约束的方式,您可能需要调用单元格的updateConstraints方法。像

这样的示例代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableViewCell *cell; //Assuming the you have some custom class to handle cell
    cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];

    if( cell == nil )
    {
        cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"myCell"];
        //... code for initialization
        cell.textField.delegate = self; //set the delegate to self so that we get delegate methods
    }

    if( self.selectedIndexPath && [indexPath compare:self.selectedIndexPath] == NSOrderedSame)
    {
        cell.button.hidden = NO;
    }
    else
    {
        cell.button.hidden = YES;
    }
    [cell updateConstraints];//update constraint to adjust the UIButton's visibility and constraints

    //... other code if any

    return cell;
}

希望它有所帮助!