以编程方式“闪烁” UITableViewCell 将背景颜色设置为白色

Posted

技术标签:

【中文标题】以编程方式“闪烁” UITableViewCell 将背景颜色设置为白色【英文标题】:Programmatically "flashing" UITableViewCell sets background color to white 【发布时间】:2014-04-28 16:30:08 【问题描述】:

我在我的UICollectionView 中设置了UILongPressGestureRecognizer 来调用

- (void)longPress:(UILongPressGestureRecognizer *)gesture 
    if (gesture.state == UIGestureRecognizerStateBegan) 
        CGPoint point = [gesture locationInView:self.collectionView];
        NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:point];
        if (indexPath) 
            self.manager.currentLongPressIndex = indexPath.row;
            [self showPopover];
        
    

方法中显示的UIPopover 有一个UITableView。我的目标是“闪烁”(选择然后取消选择UITableViewCell)并滚动显示它。我就是这样做的:

- (void)viewDidLoad 
    [super viewDidLoad];
    // get the current index path
    NSIndexPath *path = [NSIndexPath indexPathForRow:self.manager.currentLongPressIndex inSection:0];
    // set flag
    self.cellIsFlashing = YES;
    // select cell
    [self.tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionMiddle];


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    if (self.cellIsFlashing == NO) 
        [self.viewController.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
     else 
        self.cellIsFlashing = NO;
    
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];

这有点用,但是选中的单元格的背景颜色变成了白色,而且闪光灯效果看起来不太好,看起来根本没有动画。

【问题讨论】:

【参考方案1】:

尝试延迟取消选择过程:

-(void)deselectRow:(NSIndexPath *)indexPath 
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    ... // your code here

    // call the deselect method with 0.3 second delay
    [self performSelector:@selector(deselectRow:) withObject:indexPath afterDelay:0.3f];

不确定这是否可行,但值得一试。

【讨论】:

【参考方案2】:

通过将单元格选择代码从viewDidLoad更改为viewDidAppear:animated:解决了问题

【讨论】:

以上是关于以编程方式“闪烁” UITableViewCell 将背景颜色设置为白色的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将 UIImageViews 添加到 UITableViewCell

UITableViewCell 类布局无法以编程方式工作

无法在运行时以编程方式影响闪烁控制

在 Swift 中以编程方式突出显示 UITableViewCell

如何以编程方式使 UICollectionView 填充 UITableViewCell?

以编程方式在 UITableViewCell 上显示删除按钮