我有一个表格视图,其中每个单元格都包含一个按钮。我不使用didSelectRowAtIndexPath委托,但我的自定义方法用于按钮操作。我希望在单击每个单元格内的按钮时,该单元格应突出显示或更改颜色,并在单击其他单元格中的按钮时返回其正常状态(颜色)(使此单元格突出显示)。我的按钮操作方法是:
- (void)SelectButtonTapped:(UIButton *)button
{
self.tabBarController.tabBar.userInteractionEnabled = YES;
AppDelegate *proDel = [[UIApplication sharedApplication]delegate];
UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
//MyCustomCell *cell = (MyCustomCell *)button.superview.superview;
NSIndexPath *indexPath = [homeTable indexPathForCell:cell];
//cell.backgroundColor = [UIColor lightGrayColor];
//[homeTable setNeedsDisplayInRect:[homeTable rectForRowAtIndexPath:indexPath]];
DetailViewController *objDetail=[[DetailViewController alloc] init];
Home *tempSearchObj=(Home *)[profileArray objectAtIndex:indexPath.row];
objDetail.firstName=tempSearchObj.userName;
objDetail.userImageUrl=tempSearchObj.imageUrl;
objDetail.passedProfileID = tempSearchObj.profileID;
plsSelectLabel.text = [NSString stringWithFormat:@"%@",objDetail.firstName];
proDel.globalName = plsSelectLabel.text;
proDel.globalProfileId = objDetail.passedProfileID;
}
但这似乎不起作用。任何帮助将不胜感激!!
答案 0 :(得分:1)
将cellForRowAtIndexPath中的单元格选择样式设置为:
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
[cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
}
并且:
yourButton.tag = indexPath.row;
在方法中添加以下行以突出显示单元格:
UIButton *clickButton = (UIButton *)sender;
int addButtonIndex = clickButton.tag;
NSIndexPath *indexPathHighlight = [NSIndexPath indexPathForRow:addButtonIndex inSection:0];
UITableViewCell *newCell = [yourTable cellForRowAtIndexPath:indexPathHighlight];
[newCell setSelected:YES animated:YES];
取消选择上一个单元格:
NSIndexPath *previousIndexPathHighlighted = [NSIndexPath indexPathForRow:previousTag inSection:0];
UITableViewCell *previousCell = [yourTable cellForRowAtIndexPath:previousIndexPathHighlighted];
[previousCell setSelected:NO animated:YES];
previousTag = clickButton.tag;
答案 1 :(得分:0)
解决这个问题的正确方法是,在cellForRowAtIndex:
方法上,您可以了解自己的细胞是否需要突出显示。然后,在单击按钮并配置您需要执行的操作后,您应该只需执行
NSArray *indexes = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:1]];
[self.tableView reloadRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationNone];
另一种方法是访问单元格并直接更改它。但不是button.superview.superview
,而是
UITableViewCell *cell = [self.tableView cellForRowAtIndex:[NSIndexPath indexPathForRow:0 inSection:1]];
答案 2 :(得分:0)
我认为最好的方法是制作一个
NSInteger selectedCellIndex;
在cellForRowAtIndex方法
中设置按钮的标签button.tag = indexPath.row
单击按钮并重新加载表
时设置selectedCellIndexselectedCellIndex = button.tag;
[self.tableView reloadData];
然后在cellForRowAtIndex方法中检查索引是否与selectedCellIndex相同,并为单元格添加不同的颜色。
if( indexPath.row == selectedCellIndex ){
//set different colors
}
请记住在if(cell == nil)检查之外执行此操作,否则无效。