繁体   English   中英

如何检测UITableView的滚动?

[英]How to detect scrolling of UITableView?

有一个类似的问题,但答案很笼统,模糊。( 检测UITableView滚动 )请不要忽略。 我正在寻找具体的解决方案。

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

到目前为止,在检测UITableView滚动时 ,你应该UITableView 如果你子类UITableView仍然内部/私有UIScrollView无法访问。 如何访问UITableView的父ScrollView(不违反法律)?

谢谢。

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

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

在.h文件中:

@interface MyViewController : UIViewController <UIScrollViewDelegate> 

在.m文件中:

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

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


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;
}

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

@interface MyTableViewController : UITableViewController <UIScrollViewDelegate> 

PS您可以使用scrollEnabled而不是userInteractionEnabled ,但这一切都取决于您正在做什么,但userInteraction是首选选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM