2013-08-21 60 views
1

我有一点问题。当我按UITableViewCell时,我想使所有scrollview滚动到顶部。以下是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]; 
} 

谢谢!

+0

什么当你这样做时会发生? (顺便说一下,'topLayer'是什么?它是一个'UIView',这些scrollviews是子视图吗?) – Rob

+0

该应用程序崩溃,它说:[UINavigationBar setContentOffset:]:无法识别的选择器发送到实例0x71b5a00 ... –

+0

topLayer是一个UIVIew,在其中有几个uiviews,在这些视图中我有滚动视图。我也有uiNavBar在toplayer,我认为它是谁造成的问题.. –

回答

1

基本的想法是对的。这取决于你如何识别滚动视图。你可以不喜欢以下,其中明确测试子视图是否是一种UIScrollView

for (UIScrollView *scrollView in self.view.subviews) 
{ 
    if ([scrollView isKindOfClass:[UIScrollView class]]) 
     scrollView.contentOffset = CGPointZero; 
} 

或者你可以明确地引用有关具体scrollviews(在这种情况下不严格需要的类成员资格测试):

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有子视图其本身,有是scrollviews子视图,你必须这样做以下处理这subview-子视图的情况:

for (UIView *subview in topLayer.subviews) 
{ 
    for (UIScrollView *scrollView in subview) 
    { 
     if ([scrollView isKindOfClass:[UIScrollView class]]) 
      scrollView.contentOffset = CGPointZero; 
    } 
} 
+0

这没有工作... –

+0

我认为“scrollview在视图中”不只包含uiscrollview,它也包含一个uinavigationbar出于某种原因。 .. –

+0

@HenrikLP是的,这就是为什么你以太(一)添加'isKindOfClass'测试;或者(b)使用你知道只包含滚动视图的数组或IBOutletCollection。 – Rob

0

避免动态类型检查,只需放置可以滚动到数组中的视图。然后,一个小票友,添加扩展的滚动视图,使他们可以滚动使用没有PARAMS为零,它可以让我们做一个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)]; 
相关问题