我有一个tableview
,其中一个单元格包含textfield
和button
。仅当button
变为活动状态时,我才想显示包含textfield
的区域。
因此,我希望提供不同的height
,以便textfield
仅可见,当textfield
变为有效时,我想增加height of the tableviewcell
以显示button
。请帮助。
我的手机就是这样的。
如果未选择文本字段,我希望它显示为:
它与“在UITableView中使用自动布局动态单元格布局和可变行高”无关,因为我想根据所选的文本字段确定高度。
答案 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;
}
希望它有所帮助!