我有一点问题。当我按 UITableViewCell 时,我想让我的所有滚动视图滚动到顶部。以下是 didSelectRowAtIndexPath:
中的代码[self.tableView setContentOffset:CGPointZero];
[verbTableView setContentOffset:CGPointZero];
[seinhabenScrollView setContentOffset:CGPointZero];
[mdhPresensScroll setContentOffset:CGPointZero];
[mdhPreteritumScroll setContentOffset:CGPointZero];
[mhdScroll setContentOffset:CGPointZero];
....
还有更多的scrollview,我想将所有内容放在一个对象中......我尝试过以下代码:
for (UIScrollView *scrolls in topLayer.subviews)
{
[scrolls setContentOffset:CGPointZero];
}
谢谢!
答案 0 :(得分:1)
基本理念是对的。它只取决于您如何识别滚动视图。您可以执行以下操作,明确测试子视图是否为UIScrollView
:
for (UIScrollView *scrollView in self.view.subviews)
{
if ([scrollView isKindOfClass:[UIScrollView class]])
scrollView.contentOffset = CGPointZero;
}
或者您可以明确引用相关的特定滚动视图(在这种情况下,不严格需要类成员资格测试):
for (UIScrollView *scrollView in @[seinhabenScrollView, mdhPresensScroll, mdhPreteritumScroll])
{
scrollView.contentOffset = CGPointZero;
}
或者,如果您在IB中创建IBOutletCollection
,也可以使用它:
for (UIScrollView *scrollView in self.scrollViews)
{
[scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
}
(注意,在最后一个例子中,我使用动画滚动到相关位置,为用户提供一些关于刚刚发生的事情的视觉提示;这完全取决于你。)
在上面的评论中,您说topView
的子视图本身具有滚动视图的子视图,您必须执行以下操作来处理子视图子视图情况:
for (UIView *subview in topLayer.subviews)
{
for (UIScrollView *scrollView in subview)
{
if ([scrollView isKindOfClass:[UIScrollView class]])
scrollView.contentOffset = CGPointZero;
}
}
答案 1 :(得分:0)
避免动态类型检查,只需放置可滚动到数组中的视图即可。然后,一个小小的爱好者,添加一个扩展滚动视图,这样他们可以使用没有参数滚动到零,让我们使用NSArray一行(makeObjectsPerform ...)滚动...
@interface UIScrollView (ScrollToZero)
- (void)scrollToZero; // a no-param method for scrolling to zero offset
@end
@implementation UIScrollView (ScrollToZero)
- (void)scrollToZero {
[self setContentOffset:CGPointZero animated:YES];
}
@end
NSArray *allMyScrolls = @[verbTableView, seinhabenScrollView, // and so on. put ONLY scrollViews in here
// you can make this array a property, initialized when the views are created
[allMyScrolls makeObjectsPerformSelector:@selector(scrollToZero)];