从UITableView获得“拉动刷新”的最佳方法是什么?

时间:2015-02-27 15:25:36

标签: ios objective-c uitableview swipe

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

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

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

  

META:

     

我一直在浏览各种文档和诸如此类的东西。我还没有   之前这样做,所以我从来没有想过。现在我明白了   可能应该考虑一下。

     

如果这是一个明显的解决方案,我不介意被告知,只要   你帮我找到了“明显的”补救措施。我会删除这个问题   这是一个糟糕的。

     

然而,我还没有找到解决方案,而且我通常都相当擅长   那种事。

     

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

3 个答案:

答案 0 :(得分:7)

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

{
    tableViewController = [[UITableViewController alloc] init];
    [tableViewController setTableView:myTableView];

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

答案 1 :(得分:1)

如果您向UIScrollViewDelegate添加UITableView,则可以回复scrollViewDidScroll:个事件。否定contentOffset.y值表示您的用户已在您的桌面视图顶部停了下来。

答案 2 :(得分:0)

这就是我最终要做的事情。即使它不是最合法的"合法的"做事的方式,它仍然高效,荒谬简单:

我设置了一个scrollview委托陷阱,就像这样,并将它添加到委托类中:

//*******************************************
// 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
    }
}

&#34; -60&#34;是因为我在将其设置为静态之前寻找最佳偏移量。