我有一个自定义的 tableViewCell。我想通过突出显示来指示用户触地。单元格选择样式为UITableViewCellSelectionStyleBlue
. 在我设置的父控制器中self.clearsSelectionOnViewWillAppear = YES
。
我应该可以走了。没有。选择仍然粘在单元格上。我想要的是仅在触地期间的选择指示。外观应在修饰时立即恢复为未选择的外观。
我该怎么做呢?
干杯,
道格
我有一个自定义的 tableViewCell。我想通过突出显示来指示用户触地。单元格选择样式为UITableViewCellSelectionStyleBlue
. 在我设置的父控制器中self.clearsSelectionOnViewWillAppear = YES
。
我应该可以走了。没有。选择仍然粘在单元格上。我想要的是仅在触地期间的选择指示。外观应在修饰时立即恢复为未选择的外观。
我该怎么做呢?
干杯,
道格
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
下面的 Swift 示例用于didHighlightRowAtIndexPath
更改触摸时单元格的背景颜色并didUnhighlightRowAtIndexPath
重置颜色 - 见下文:
// MARK: UITableViewDelegate
func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) {
if let cell = tableView.cellForRowAtIndexPath(indexPath) {
cell.backgroundColor = UIColor.greenColor()
}
}
func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) {
if let cell = tableView.cellForRowAtIndexPath(indexPath) {
cell.backgroundColor = UIColor.blackColor()
}
}
覆盖- (void)setSelected:(BOOL)selected animate:(BOOL)animated
而不调用 super
这有效:
它获取带有单元格边框的背景视图,看起来像分隔符。不要更改界面生成器中的默认表格视图设置。确保 UITableViewCellSelectionStyleNone 未设置为 selectionstyle。我正在粘贴工作代码。:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *kCellIdentifier = @"PlayListCell";
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier];
}
MPMediaPlaylist *playList = [playlistCollection objectAtIndex:indexPath.row];
cell.textLabel.text = playList.name;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
// cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d Songs",[playList.items count]];
MPMediaItemCollection *playListMediaCollection = [playlistCollection objectAtIndex:indexPath.row ];
cell.imageView.image =[UIImage imageWithCGImage:[self getImageForCollection:playListMediaCollection.items]];
// the main code which make it highlight
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:170.0f/255.0 green:170.0f/255.0 blue:170.0f/255.0 alpha:1.0f];
[bgColorView.layer setBorderColor:[UIColor blackColor].CGColor];
[bgColorView.layer setBorderWidth:1.0f];
[cell setSelectedBackgroundView:bgColorView];
return cell;
}
我有同样的问题。下面的代码非常适合我。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}