1

少し問題があります。UITableViewCellを押したときに、すべてのスクロールビューを一番上までスクロールさせたい。以下はdidSelectRowAtIndexPathのコードです。

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

それらのスクロールビューはもっとあります。すべてを1つのオブジェクトまたは何かに入れたいです...次のコードを試しました:

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

または、IBOutletCollectionIB で を作成する場合は、それも使用できます。

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 に答える