我有一个UITableView
,它有许多静态单元格。没有原型。
一个单元格为UITextField
和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
正如我对动态原型尺寸的要求一样?
答案 0 :(得分:0)
你可以用一点技巧。 创建2个iVars
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];
现在在你的代表中你可以使用那些iVars
-(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];
}
答案 1 :(得分:0)
动态更改tableviewcells的高度。
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return Yourvalue; //return whatever u want ur cell to have size.
}
使用此方法并返回您认为ur cell应具有的值, 例如,如果单元格内的ur标签也是动态创建的,那么按照你创建的标签返回标签的大小。
希望这有帮助。