[英]How to detect scrolling of UITableView?
有一个类似的问题,但答案很笼统,模糊。( 检测UITableView滚动 )请不要忽略。 我正在寻找具体的解决方案。
我有UITableView
,它有可编辑的文本字段,当选择另一个单元格时会出现PickerView。 我需要的是当用户开始滚动这个UITableView
时隐藏firstResponder或PickerView。
到目前为止,在检测UITableView滚动时 ,你应该UITableView
。 如果你子类UITableView
仍然内部/私有UIScrollView
无法访问。 如何访问UITableView
的父ScrollView(不违反法律)?
谢谢。
您不需要将UITableView
子类UITableView
跟踪滚动。 您的UITableViewDelegate也可以用作UIScrollViewDelegate
。 因此,在您的委托类中,您可以实现-scrollViewWillBeginDragging:
或者在您的情况下需要的任何UIScrollViewDelegate
方法。 (正如你提到的问题中的实际建议)
为了扩展弗拉基米尔的答案,这是我实现这个解决方案的方式:
在.h文件中:
@interface MyViewController : UIViewController <UIScrollViewDelegate>
在.m文件中:
- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView {
//logic here
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
if (scrollView == myTableView){
// Your code here.....
}
}
我遇到了同样的问题,我从上面的答案中得到了一些想法来修复它,但是如果我想在滚动表视图时刷新应用程序崩溃,但是如果我在刷新时滚动它也会崩溃。 因此,在所有情况下解决问题的扩展解决方案是:
1.1。 如果用户按下刷新按钮,则禁用滚动
1.2。 刷新过程完成后启用滚动
2.1。 如果用户正在滚动,请禁用刷新按钮
2.2。 用户完成滚动后启用刷新按钮
实现第一部分(1.1。和1.2。):
-(void)startReloading:(id)sender
{
...
self.tableView.userInteractionEnabled = NO;
// and the rest of the method implementation
}
-(void)stopReloading:(id)sender
{
self.tableView.userInteractionEnabled = YES;
// and the rest of the method implementation
}
实现第二部分(2.1。和2.2。):
- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView
{
barButton.enabled = NO;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
barButton.enabled = YES;
}
正如前面的答案中所解释的那样,需要在.h
文件中设置UISCrollViewDelegate
:
@interface MyTableViewController : UITableViewController <UIScrollViewDelegate>
PS您可以使用scrollEnabled
而不是userInteractionEnabled
,但这一切都取决于您正在做什么,但userInteraction是首选选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.