什么是从UITableView“拉刷新”的最佳途径?

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

我想做一个相当标准的手势响应,拖动一个表,然后释放它,触发更新。

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

META:

我一直在查看各种文档和什么。 我以前没有这样做过,所以我从来没有想过。 现在我明白了,我应该想一想。

如果这是一个明显的解决办法,我不介意被告知,只要你帮我find“明显”的补救办法。 如果这个问题不好,我会删除这个问题。

但是,我还没有find解决办法,而且我通常还是很擅长的。

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

如果你添加一个UIScrollViewDelegate到你的UITableView ,你可以响应scrollViewDidScroll: events。 负的contentOffset.y值表示您的用户已经在您的桌面视图的顶部拉下来了。

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

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

这是我最终做的。 尽pipe它不是做法最“合法”的方式,但仍然非常有效,而且非常简单:

我设置了一个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 } } 

“-60”是因为我正在寻找最佳的偏移,然后将其设置为静态。