如何检测UITableView的滚动?

时间:2010-02-09 07:06:28

标签: iphone uitableview

有一个类似的问题,但答案很笼统,含糊不清。(Detecting UITableView scrolling) 请不要解雇。我正在寻找具体的解决方案。

我有UITableView,其中包含可编辑的文本字段,当选择了另一个单元格时,会出现PickerView。 我需要的是在用户开始滚动此UITableView时隐藏firstResponder或PickerView。

到目前为止,问题Detecting UITableView scrolling存在一个你应该继承UITableView的消息。如果您的子类UITableView仍然无法访问内部/私有UIScrollView。 如何访问UITableView的父ScrollView(不违反法律规定)?

感谢。

4 个答案:

答案 0 :(得分:36)

您无需子类UITableView来跟踪滚动。您的UITableViewDelegate也可以作为UIScrollViewDelegate。因此,在您的委托类中,您可以在您的情况下实施-scrollViewWillBeginDragging:或任何UIScrollViewDelegate方法。 (正如你提到的问题中实际建议的那样)

答案 1 :(得分:8)

为了扩展弗拉基米尔的答案,这就是我实施这个解决方案的方式:

在.h文件中:

@interface MyViewController : UIViewController <UIScrollViewDelegate> 

在.m文件中:

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView {
    //logic here
}

答案 2 :(得分:6)

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    if (scrollView == myTableView){
       // Your code here.....
    }
}

答案 3 :(得分:1)

我遇到了同样的问题,我从上面的答案中得到了一些想法来修复它,但是如果我想在滚动表视图时刷新应用程序崩溃,但是如果我滚动它时它也会崩溃正在焕然一新。因此,在所有情况下解决问题的扩展解决方案是:


1.1。如果用户按下刷新按钮,则禁用滚动

1.2。刷新过程完成后启用滚动


2.1。如果用户正在滚动,请禁用刷新按钮

2.2。用户完成滚动后启用刷新按钮


实现第一部分(1.1。和1.2。):

-(void)startReloading:(id)sender
{
    ...
    self.tableView.userInteractionEnabled = NO;
    // and the rest of the method implementation
}

-(void)stopReloading:(id)sender
{
    self.tableView.userInteractionEnabled = YES;
    // and the rest of the method implementation
}

实施第二部分(2.1。和2.2。):

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView
{
    barButton.enabled = NO;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    barButton.enabled = YES;
}

正如前面的回答中所解释的那样,UISCrollViewDelegate文件中需要设置.h

@interface MyTableViewController : UITableViewController <UIScrollViewDelegate> 

P.S。您可以使用scrollEnabled代替userInteractionEnabled,但这一切都取决于您正在做什么,但userInteraction是首选选项。