【问题标题】:How to detect scrolling of UITableView?如何检测 UITableView 的滚动?
【发布时间】:2010-02-09 07:06:28
【问题描述】:

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

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

到目前为止,Detecting UITableView scrolling 存在问题,建议您应该继承 UITableView。如果您的子类UITableView 仍然是内部/私有UIScrollView 不可访问。 如何访问UITableView的父ScrollView(不违法)?

谢谢。

【问题讨论】:

    标签: iphone uitableview


    【解决方案1】:

    您不需要继承 UITableView 来跟踪滚动。您的UITableViewDelegate 也可以用作UIScrollViewDelegate。因此,在您的 delegate 类中,您可以实现 -scrollViewWillBeginDragging: 或任何您需要的 UIScrollViewDelegate 方法。 (正如您提到的问题中实际建议的那样)

    【讨论】:

    • 谢谢,我知道了。只需要将 添加到 @interface MyTableViewController : UIViewController 然后实现 -scrollViewWillBeginDragging: 谢谢。
    • 如何才能从特定表格中获得滚动?比如说我有 2 个 UITableViews?
    • @jeraldo,所有 UIScrollViewDelegate 方法都接受调用它作为参数的滚动视图,因此您可以轻松确定您正在处理的 UIScrollView
    【解决方案2】:

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

    在 .h 文件中:

    @interface MyViewController : UIViewController <UIScrollViewDelegate> 
    

    在 .m 文件中:

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

    【讨论】:

      【解决方案3】:
      - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
          if (scrollView == myTableView){
             // Your code here.....
          }
      }
      

      【讨论】:

        【解决方案4】:

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


        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 是首选选项。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-07
          • 2017-10-14
          • 2013-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多