我有一个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];
}