我知道这个问题有很多答案。但它没有达到预期的效果。 didDEselectrow无法正常工作。我有一个UIImageView,我已设置为在cellforRowAtIndex中隐藏True。当有人选择hidden的任何行值时,将其设置为false。
**我的主要问题是当我选择另一行时,前一行状态不会改变,它也会显示已选中。我附上了必要的代码片段,请检查并帮助我完成此操作。 **
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
EventTypeTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Event_Type" forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (cell.selectionStatus)
[cell.selectEvent setHidden:NO];
else
[cell.selectEvent setHidden:YES];
[cell.eventTypeName setText:[eventTypeName objectAtIndex:indexPath.row]];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
EventTypeTableViewCell *cell = (EventTypeTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
if(cell.selectionStatus == TRUE)
{
cell.selectionStatus = FALSE;
}
else
{
] cell.selectionStatus = TRUE;
}
[tableView reloadData];
}
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
EventTypeTableViewCell *cell = (EventTypeTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
if(cell.selectionStatus == FALSE)
{
//Do your stuff
cell.selectionStatus = TRUE;
}
else
{
//Do your stuff
cell.selectionStatus = FALSE;
}
[tableView reloadData];
}
答案 0 :(得分:0)
我怀疑没有调用didDeselect,因为你允许在tableView中进行多项选择。
您是否将表格视图的选择样式设置为“单选”?您可以在界面构建器/故事板中执行此操作,也可以以编程方式执行此操作:
- (void) viewDidLoad {
self.tableView.allowsMultipleSelection = NO;
}
这样当您选择另一行时,它将取消选择旧选择。此外,您可以通过在每个单元格的选定状态更改时不调用[tableView reloadData]来简化代码并使一切看起来更好。我建议这样做的方法是,只要单元格的选择发生变化,就会在selectEvent
内更改EventTypeTableViewCell
的隐藏状态。
这让你知道:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
EventTypeTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Event_Type" forIndexPath:indexPath];
[cell.eventTypeName setText:[eventTypeName objectAtIndex:indexPath.row]];
return cell;
}
在EventTypeTableViewCell
:
@implementation EventTypeTableViewCell
/// Your code ///
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
self.selectEvent.hidden = !selected;
}
@end
答案 1 :(得分:0)
试试这个::
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
}
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
}