动态增加表格行高

时间:2017-09-11 05:18:06

标签: ios objective-c uitableview heightforrowatindexpath

我有一个包含一个自定义单元格的表格,其中包含一个标签和一个textfield.Am重新使用相同的单元格,大约有5行。仅当用户在文本字段中输入时,我才想在文本字段下方显示一个视图。当在第一个文本域视图中输入数据时,应该为其他行和所有其他行隐藏。默认高度必须为120,当显示我的视图时,行高应增加到250.这是我的代码,

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

      return 120;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *cellIdentifier = @"DetailsTableCell";
cell = (NewsDetailsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
    cell = [[NewsDetailsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
if (indexPath.row == 0) {
    cell.newView.tag = 200;
}
else if (indexPath.row == 1) {
    cell.newView.tag = 201;
}
else {
    cell.newView.tag = 202;
}

   return cell;
}

这里的新视图是我在文本更改时显示的UIView。

- (IBAction)textFieldChanged:(UITextField *)textField replacementString:(NSString *)string {

NSIndexPath *indexPath = [newsTable indexPathForCell:(NewsDetailsTableViewCell*)[[textField superview] superview]];
NSIndexPath *myPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section];
NewsDetailsTableViewCell *newsTableCell = (NewsDetailsTableViewCell*)[newsTable cellForRowAtIndexPath:myPath];

 if (indexPath.row == 0 && newsTableCell.newView.tag == 100) {
    newsTable.rowHeight = 250;
    newsTableCell.newView.hidden = false;

} else if (indexPath.row == 1 && newsTableCell.newView.tag.tag == 101) {
    newsTable.rowHeight = 250;
    newsTableCell.newView.hidden = false;
} else {
    newsTable.rowHeight = 250;
    newsTableCell.newView.hidden = false;
   }
}

在我的文字更改中获取我的视图但行高度没有改变。它仍然显示120高度。

我也试过了,

NSArray* rowsTobeReloaded = [NSArray arrayWithObjects:indexPath, nil];
[newsTable reloadRowsAtIndexPaths:rowsTobeReloaded withRowAnimation:UITableViewRowAnimationNone];

但它没有用。我应该在文本更改中重新加载我的tableview吗?或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

你需要改变身高

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


  if (usingNewView){
     return 250;
  }
  return 120;
}

并在

中设置usingNewView的逻辑
- (IBAction)textFieldChanged:(UITextField *)textField replacementString:(NSString *)string

答案 1 :(得分:0)

您必须修改以下方法中的逻辑:enter image description here

可以根据要显示textField的行修改selectedRowNum。 此外,cellForRowAtIndexPath不用于设置tableview中行的高度。每次调用reloadData或reloadIndexes都会调用heightForRowAtIndexPath方法。