【问题标题】:iOS - stop UIRefreshControl on push upiOS - 向上推时停止 UIRefreshControl
【发布时间】:2014-05-21 22:31:37
【问题描述】:

我最近实现了UIRefreshControl,以便在下拉时从 iCloud 加载数据,但是,当用户要求停止刷新时,我发现用户将UITableView 向上推很直观。我无法弄清楚如何在不使用 UIPanGestureRecognizer 的情况下检测到这一点,这将删除我的 UITableView 的功能。

有什么方法可以检测到在刷新期间将UITableView 备份,而不删除现有表格视图的功能?谢谢。

【问题讨论】:

    标签: ios uitableview gesture uipangesturerecognizer uirefreshcontrol


    【解决方案1】:

    在这种情况下我要做的是利用 UITableViewDelegate 符合 UIScrollViewDelegate 的事实。这样你就可以知道你的 tableView 上何时发生了不同的滚动事件。如果您是 UITableViewController 的子类,那么您已经符合 UITableViewDelegate,所以一切都很好。

    我做的第一件事是为 contentOffset 设置一个属性,以便在拖动开始时记录它。

    @property (nonatomic, strong) NSNumber *contentOffsetAtStartOfDragging;
    

    我选择将其设为 NSNumber 而不是说看起来更自然的 CGFloat 的原因是,我不希望该属性在不需要时卡在某个值上。当该属性对我不再有用时,我希望它为零。不过,这只是我的设计选择,不会有任何区别。

    无论如何,我这样做的方式是在拖动开始时记录 contentOffset,然后在拖动结束时将其与 contentOffset 进行比较。那就是我知道用户滚动到的 contentOffset 是否低于拖动开始时的值,我可以结束刷新。

    此外,当拖动完成时,出于上述原因,我将我的属性设置为 nil。

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
    {
        if ([self.refreshControl isRefreshing]) {
            self.contentOffsetAtStartOfDragging = [NSNumber numberWithFloat:scrollView.contentOffset.y];
        }
    }
    
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {
        if ([self.refreshControl isRefreshing] &&
            scrollView.contentOffset.y > [self.contentOffsetAtStartOfDragging floatValue])
        {
            [self.refreshControl endRefreshing];
        }
    
        self.contentOffsetAtStartOfDragging = nil;
    }
    

    希望这对您有所帮助。让我知道它是否适合你。

    【讨论】:

    • 谢谢。我使用了您的部分建议,并且效果很好。我只跟踪了拖动的结束,如果正在刷新,我检查了滑动有多低,如果足够低,我会停止刷新。这是代码。 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { if([refreshNotes isRefreshing] && scrollView.contentOffset.y + scrollView.frame.origin.y >= 0) { [refreshNotes endRefreshing]; } }
    • 是的,这当然也可以。唯一不同的是,现在用户必须一直向上滑动才能停止刷新。我想这两种方式都有利有弊。以我的方式,用户不必一直滚动,但他们可能会无意中触发它。以您的方式,用户必须付出更多的努力,但这几乎总是有意的。我想这是您必须做出的设计选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多