1

我有一个小问题。当我按下UITableViewCell时,我想让我的所有滚动视图滚动到顶部。以下是didSelectRowAtIndexPath 中的代码:

[self.tableView setContentOffset:CGPointZero];
[verbTableView setContentOffset:CGPointZero];     
[seinhabenScrollView setContentOffset:CGPointZero];
[mdhPresensScroll setContentOffset:CGPointZero];
[mdhPreteritumScroll setContentOffset:CGPointZero];
[mhdScroll setContentOffset:CGPointZero];
....

还有更多这些滚动视图,我想将所有内容放在一个对象或其他东西中......我尝试了以下代码:

for (UIScrollView *scrolls in topLayer.subviews)
{
    [scrolls setContentOffset:CGPointZero];
}

谢谢!

4

2 回答 2

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;
}

或者,如果您IBOutletCollection在 IB 中创建一个,也可以使用它:

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;
    }
}
于 2013-08-21T16:27:56.993 回答
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)];
于 2013-08-21T16:41:26.763 回答