从UITableView获取"Pull to Refresh"的最佳方式是什么?



我有一个UITableView,它显示从WiFi连接设备接收的数据。

我想做一个相当标准的手势响应,把一张桌子拖下来,然后释放它,以触发更新。

我想我可以在桌子的基板视图上附加一个滑动手势识别器,但我想知道是否有办法直接从桌子本身截取这个手势。

META:

我一直在看各种各样的文件等等。我还没有以前做过这件事,所以我从来没有想过。现在我看到我可能应该考虑一下。

如果这是一个显而易见的解决方案,我不介意别人告诉我,只要你帮我找到"显而易见"的治疗方法。如果这很糟糕。

然而,我还没有找到解决方案,而且我通常相当擅长诸如此类的事情。

更新我更改了标题以更好地反映我的要求。

完全原生的方法是在UIViewController中使用UITableViewController,例如

{
    tableViewController = [[UITableViewController alloc] init];
    [tableViewController setTableView:myTableView];
    refreshControl = [[UIRefreshControl alloc] init];
    [tableViewController setRefreshControl:refreshControl];
    [refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
}

如果将UIScrollViewDelegate添加到UITableView,则可以响应scrollViewDidScroll:事件。负值contentOffset.y表示用户已下拉到表视图的顶部。

这就是我最终所做的。尽管这不是最"合法"的做事方式,但它仍然非常有效,而且简单得离谱:

我像这样设置了一个滚动视图委托陷阱,并将其添加到委托类:

//*******************************************
// Reacts to the table's scroller being changed.
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
                     withVelocity:(CGPoint)velocity
              targetContentOffset:(inout CGPoint *)targetContentOffset {
#ifdef DEBUG
    NSLog ( @"MyViewController::scrollViewWillEndDragging:%@withVelocity:(%f,%f)targetContentOffset:(%f,%f)",scrollView,velocity.x, velocity.y, targetContentOffset->x, targetContentOffset->y );
#endif
    // We have to have had a "hard pull South" to trigger a refresh of the objects.
    if ( (velocity.y < 0) && ([scrollView contentOffset].y < -60) ) {
#ifdef DEBUG
        NSLog ( @"We will perform a new refresh." );
#endif
    }
}

"-60"是因为在将其设置为静态之前,我正在寻找最佳偏移。

最新更新