我有一个包含3个项目的表格视图,其中一个我有一个按钮。选择按钮后,我想隐藏该按钮,显示其后面的项目。我正在使用表格视图单元格显示表格行。当我选择隐藏的一个按钮时,滚动表格会隐藏更多按钮。隐藏按钮似乎隐藏了基于当前视图的可视行中的某个位置的按钮。我试图隐藏特定行上的按钮。
每当我点击代码隐藏按钮时,我都可以写入NSLog,但我只会到达那里,但是当我滚动表格时,按钮的隐藏属性会应用于其他进入视图的行。如果我选择第53行上的按钮,我只想隐藏第53行中的按钮,而不是120行表中其他行上的按钮。
有没有人做过我想做的事情?任何帮助我可以弄清楚发生了什么将不胜感激。感谢。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ElementCellIdentifier = @"ElementCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ElementCellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ElementRowCell"
owner:self options:nil];
if ([nib count] > 0) {
cell = self.tvCell;
} else {
NSLog(@"failed to load ElementRowCell nib file!");
}
}
NSUInteger row = [indexPath row];
UILabel *atomic_number = (UILabel *)[cell.contentView viewWithTag:1];
atomic_number.text = [NSString stringWithFormat:@"%d",elements_table[row].atomic_number];
UILabel *element_name = (UILabel *)[cell.contentView viewWithTag:2];
element_name.text = [NSString stringWithCString:elements_table[row].element_name];
UILabel *element_symbol = (UILabel *)[cell.contentView viewWithTag:3];
element_symbol.text = [NSString stringWithCString:elements_table[row].element_symbol];
return cell;
}
- (IBAction)buttonPressed:(id)sender {
NSLog(@"Getting to buttonPressed from row button");
UIButton *pressedButton = (UIButton *)sender;
NSIndexPath *indexPath = [self.mainTableView indexPathForCell: (UITableViewCell *)[sender superview]];
pressedButton.hidden = TRUE;
}
答案 0 :(得分:0)
对不起。
基本上发生的事情是你正在隐藏特定表格视图单元格中的按钮实例。问题是当它为另一行出列时,没有什么能恢复它的状态。如果您只是将其状态恢复为可见状态,那么您单击的行将被遗忘。您需要保存已经单击的行才能在tableView:cellForRowAtIndexPath:
中正确恢复状态。
我将如何处理此问题是声明NSMutableSet *selectedIndexPaths;
。并使用它来存储我选择的行。然后,当单击该按钮时,将indexPath添加到该集合中。
- (IBAction)buttonPressed:(UIButton *)button{
if (![button isKindOfClass:[UIButton class]]) return;
UIView *finder = button.superview;
while ((![finder isKindOfClass:[UITableViewCell class]]) && finder != nil) {
finder = finder.superview;
}
if (finder == nil) return;
UITableViewCell *myCell = (UITableViewCell *)finder;
NSIndexPath *indexPath = [self.mainTableView indexPathForCell:myCell];
[selectedIndexPaths addObject:indexPath];
button.hidden = TRUE;
NSLog(@"IndexPathRow %d",indexPath.row);
}
现在在tableView:cellForRowAtIndexPath:
中滚动时正确恢复状态使用if语句来设置按钮的隐藏属性,如下所示:
buttonPropertyName.hidden = ([selectedIndexPaths containsObject:indexPath]);