-1

我有一个UITableView包含 10 个部分的列表,每个部分包含一个textLabel.

我将每个单元格中的文本数量限制为 10 行,并放置一个按钮以允许用户扩展单元格中的文本。

问题是,当在“显示更多”(如果单元格未展开)和“显示更少”(如果单元格已展开)之间单击按钮时,我想更改按钮上的文本。我怎样才能做到这一点?

现在我在cellForRowAtIndexPath. 它似乎无法正常工作,有时当仅显示 10 行时按钮显示“显示较少”。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ButtonCell"];

if (!cell) {

  UIButton *readmoreButton = [UIButton buttonWithType:UIButtonTypeCustom];

    [readmoreButton setTitle:@"Read More" forState:UIControlStateNormal];
  [cell addSubview:readmoreButton];

}
else {

  NSEnumerator *e = [cell.subviews objectEnumerator];
  id object;
  while (object = [e nextObject]) {
    if ([object class]==UIButton.class && [((UIButton*)object).titleLabel.text isEqualToString:@"Read Less"])
      ((UIButton*)object).titleLabel.text = @"Read More";
    }
}

当用户单击按钮时,将调用以下方法。NSMutableArray ProposalInfo跟踪哪个单元格是/未扩展的。

- (void)toggleFullProposal:(id) sender {

// get cell
NSIndexPath *index = [self.tableView indexPathForCell:(UITableViewCell *)[sender superview]];

ProposalInfo *proposalInfo = [self.proposalInfoArray objectAtIndex:index.section];

if ([proposalInfo expanded]==YES) {

    [proposalInfo setExpanded:NO];

    [(UIButton *)sender setTitle:@"Read More" forState:UIControlStateNormal];

}  else {

    [proposalInfo setExpanded:YES];

    [(UIButton *)sender setTitle:@"Read Less" forState:UIControlStateNormal];

}

// create index paths to reload
NSMutableArray *indexPathsToReload = [[NSMutableArray alloc] init];
[indexPathsToReload addObject:[NSIndexPath indexPathForRow:0 inSection:index.section]];

// refresh
[self.tableView reloadRowsAtIndexPaths:indexPathsToReload withRowAnimation:UITableViewRowAnimationNone];

}
4

1 回答 1

0

单击按钮时,请确保现在将全文设置为单元格。然后只重新加载单元格并注意您需要修复标签的高度,layoutSubviews:然后返回适当的高度heightForRowAtIndexPath:

((MyCell*)[tableview cellForRowAtIndexPath:buttonClickedindexPath]).fullText = myModel.fullText;

并在layoutSubviews自定义类单元格的 : 方法中扩展标签的框架以适合里面的文本,然后返回适当的高度,heightForRowAtIndexPath:这应该可以解决问题。

于 2012-11-28T18:17:56.870 回答