我在UIPanGestureRecognizer
子类上添加了UITableViewCell
,以便当用户向左滑动时,会显示下面的按钮(类似于Mail应用中的按钮)。我在awakeFromNib
:
// Add a pan gesture recognizer to the pannable view.
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panScrollView:)];
panGesture.delegate = self;
[self.pannableView addGestureRecognizer:panGesture];
我希望尽管我的自定义手势识别器允许滚动表视图,所以我在同一个UITableViewCell
子类中也有以下内容:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
我现在的问题是我不知道如何一次只允许一个手势识别器,因此当用户侧扫时,表格视图不会滚动,反之亦然。帮助
在表格视图的视图控制器中实现UIGestureRecognizerDelegate,除了用于滚动表格视图的垂直手势识别器之外,还要求任何其他手势识别器失败。
将表格视图的panGestureRecognizer
委托设置为包含它的视图控制器(比如ContainingViewController
)。
self.tableView.panGestureRecognizer.delegate = self;
让ContainingViewController
实施UIGestureRecognizerDelegate
。
shouldRequireFailureOfGestureRecognizer:
并返回YES(我假设otherGestureRecognizer
将是水平平移手势)。错误:' UIScrollView的内置平移手势识别器必须将其滚动视图作为其代理。'
答案 0 :(得分:1)
创建一个bool,允许你的panGesture在panScrollView
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
self.blockPanGesture = YES;
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
self.blockPanGesture = NO;
}
然后
-(void)panScrollView:(UIPanGestureRecognizer *)panGestureRecognizer
{
if(self.blockPanGesture == NO)
{
// do the stuff
}
}
如果您正在平移整个桌面视图,我会将手势识别器放在tableView本身上......否则还有
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return YES if you want the specified item to be editable.
return YES;
}
为您处理所有这些......但我假设您不想使用此功能。您也可以构建此逻辑,例如,您可能希望在scrollView也可以通过在-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
等中进行类似检查来进行调整。
答案 1 :(得分:1)
使用Magoo解决方案,我做了一些适合我的simillar。希望它可以帮到某人。
在Controller类中
#pragma mark - UIScrollViewDelegate methods
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
ApplicationDelegate.blockPanGesture = YES;
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
ApplicationDelegate.blockPanGesture = NO;
}
内部细胞:
- (IBAction)panGestureRecognizer:(UIPanGestureRecognizer *)panGesture
{
if(ApplicationDelegate.blockPanGesture)
return;
// do your stuff
}
仅供参考:在Cell的xib文件中拖动UIPanGestureRecognizer并在IBOutletAction上创建| panGestureRecognizer:|
答案 2 :(得分:-2)
您是否尝试将跳出属性设置为NO?