什么是从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”是因为我正在寻找最佳的偏移,然后将其设置为静态。