0

我有一个UITableView有许多静态单元格的。没有原型。

一个单元格作为 aUITextField和 a UITextView。我希望UITextView根据UITextField. 这不是问题。

我的问题是我想调整UITableViewCell这两个控件所在的大小 - 这样当UITextView隐藏单元格高度为 30 时,它的高度为 70(这使得UITextView完全可见)。

由于它们是静态单元格,我只需将 IB 中的高度设置为 70(最大),因此当UITextView隐藏单元格时,单元格中有很多未使用的空间,我想通过将单元格高度更改为 30 来消除这些空间.

我假设我需要告诉单元格使用类似的东西重绘

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[indexPathOfYourCell] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates]; 

但是如何从子视图(UITextField)中获取对单元格的引用?

另外我将如何告诉单元格新的高度?我应该标记它并使用

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

就像我对动态原型尺寸一样?

4

2 回答 2

0

当涉及到动态改变 tableviewcells 的高度时。

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return Yourvalue; //return whatever u want ur cell to have size.
  }

使用此方法并返回您认为您的单元格应具有的值,例如,如果单元格内的您的标签也是动态创建的,则返回您创建的标签的大小。

希望这可以帮助。

于 2014-07-04T14:05:13.553 回答
0

你可以使用一个小技巧。创建 2 个 iVar

1)  NSIndexPath *selectedIndex;
2)  BOOL isTextViewFull;

在切换隐藏/显示 textView 时

if(showfulltextview)
{
   selectedIndex  =  indexPath; // IndexPath of the current cell selected
   isTextViewFull =  YES;
}
else
{
   selectedIndex  =  nil;
   isTextViewFull =  NO;
}

[_yourTableView reloaddata];

现在在您的委托中,您可以使用这些 iVar

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   CGFloat height = 30;
   if(isTextViewFull && indexPath.row == selectedIndex.row)
   {
     height = 70;
   }

  return height;
}

如果您没有跟踪它,这是一种获取 TextField 的 IndexPath 的方法。在 Textfield Delegate 中编辑 Textfield 时

- (void)textFieldDidBeginEditing:(UITextField *)textField
  {
     // Get the cell in which the textfield is embedded
     id textFieldSuper = textField;
     while (![textFieldSuper isKindOfClass:[UITableViewCell class]]) {
           textFieldSuper = [textFieldSuper superview];
     }
     NSIndexPath *indexPath = [_yourTableView indexPathForCell:(UITableViewCell *)textFieldSuper];
   }
于 2014-07-04T10:21:12.367 回答