手勢沖突
tableviewcell可以觸發點擊,同時tableview的父視圖有點擊識別,這樣點擊的時候就會產生沖突。解決方法在GestureRecgnizer代理方法里面區分手勢。
#pragma mark tapGestureRecgnizerdelegate 解決手勢沖突
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UITableView class]]){
return NO;
}
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
兩個控件之間的手勢沖突
我在一個橫向滾動的scrollview里面加了一個豎向滾動的tableview,這時如果實現了scrollview的代理方法卻沒有區分scrollview和tableview,這時候tableview的滾動會發生混亂。解決方法是在didScroll代理方法里區分這兩個。
#pragma mark - scrollView delegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if ([scrollView isKindOfClass:[UITableView class]]) {
// NSLog(@"------是列表---");
}
else {
// NSLog(@"------是滾動試圖----");
}
}
2016/9/22更新
UIScrollView和子視圖TableView的cell右滑刪除沖突
橫向滾動的scrollview里面有一個子視圖tableview,tableview的cell右右滑沖突,除非手指激活tracking停留一會兒,否則無法激活右滑刪除。
解決辦法類似上面的,scrollview的左右滑依舊是由UIPanGesturerRecognizer控制的,但是該手勢的代理無法更改
// Use these accessors to configure the scroll view's built-in gesture recognizers.
// Do not change the gestures' delegates or override the getters for these properties.
@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer NS_AVAILABLE_IOS(5_0);
寫一個UIScrollView的子類重寫下面的方法即可:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
//NSLog(@"手勢觸發的類=%@",NSStringFromClass([touch.view class]));
// 若為UITableViewCellContentView(即點擊了tableViewCell),則不截獲Touch事件
if ([NSStringFromClass([touch.view class])isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 若為UITableViewCellContentView(即點擊了tableViewCell),則不截獲Touch事件
if ([NSStringFromClass([gestureRecognizer.view class])isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}