我在UILongPressGestureRecognizer
中设置了UICollectionView
来调用
- (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];
}
这种方法有效,但所选单元格的背景颜色变为白色,闪光效果看起来不太好,看起来根本没有动画效果。
答案 0 :(得分:0)
尝试推迟取消选择过程:
-(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];
}
不确定这是否会起作用但值得一试。
答案 1 :(得分:0)
通过将单元格选择代码从viewDidLoad
更改为viewDidAppear:animated: