2009-10-19 175 views
56

我已經分類了UITableView(作爲KRTableView)並實現了四種基於觸摸的方法(touchesBegan,touchesEnded,touchesMoved和touchesCancelled),以便我可以檢測基於觸摸的事件何時在UITableView上處理。基本上我需要檢測的是UITableView向上或向下滾動。檢測UITableView滾動

但是,創建UITableView和創建上述方法的子類只能檢測UITableViewCell中發生滾動或手指移動的情況,而不是整個UITableView。

只要我的手指移動到下一個單元格上,觸摸事件就不會執行任何操作。

這是我如何繼承的UITableView:

#import "KRTableView.h" 


@implementation KRTableView 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    NSLog(@"touches began..."); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesMoved:touches withEvent:event]; 
    NSLog(@"touchesMoved occured"); 
} 

- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent *)event { 
    [super touchesCancelled:touches withEvent:event]; 
    NSLog(@"touchesCancelled occured"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 
    NSLog(@"A tap was detected on KRTableView"); 
} 

@end 

我怎麼能當UITableView的是或滾動上下檢測?

回答

142

您不需要攔截事件方法。檢查文檔中的UIScrollViewDelegate協議,並根據您的情況實施-scrollViewDidScroll:-scrollViewWillBeginDragging:方法。

+0

viewDidScroll正在不斷被只要你滾動調用。所以你不能在scrollViewDidScroll中設置變量isDragging爲galse。 – 2013-03-28 07:19:56

+0

是否有可能在滾動或向下滾動之間進行區分? – Markus 2017-05-05 07:54:39

+0

@Markus https://stackoverflow.com/questions/2543670/finding-the-direction-of-scrolling-in-a-uiscrollview – tdios 2017-06-01 14:25:52

38

我想補充以下內容:

如果你是一個UITableView工作很可能你已經實施UITableViewDelegate填寫表格與數據。

協議的UITableViewDelegate符合UIScrollViewDelegate,因此,所有你需要做的是落實直接在您的UITableViewDelegate實現-scrollViewWillBeginDragging-scrollViewDidScroll方法,如果實現類設置不如授人以你的UITableView,他們將被自動調用。

如果您還想攔截表格中的點擊,而不僅僅是拖動和滾動,則可以擴展並實現您自己的UITableViewCell並使用其中的touchesBegan:方法。通過組合這兩種方法,您應該能夠在用戶與UITableView交互時完成大部分所需的操作。

1

這是我的錯誤,我試圖在重新加載tableview之前調用該方法。下面的代碼幫助我解決了這個問題。

[mytableview reloadData];

[mytableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:btn.tag-1] atScrollPosition:UITableViewScrollPositionTop animated:YES];