1

iOS の標準ジェスチャーの 1 つは、ステータス バー (信号レベル、バッテリー強度などを示す画面上部のバー) をタップすることで、コンテンツを自動的にスクロールします (テーブル ビュー、スクロール ビューなど)。など)を先頭に。

チャット サーバーと連携するアプリを作成しています。新しいチャット メッセージが受信されると、UITextView の下部に追加されます。もちろん、ユーザーはスクロールして前のチャット履歴を見ることができます。

「ステータスバーをタップする」ショートカットをオーバーライドして、一番上までスクロールする代わりに、独自のメソッドのいずれかを呼び出すことはできますか? (ビュー コントローラーに、チャット ウィンドウを自動的に下にスクロールするメソッドがあります)。

4

2 に答える 2

2

これが私が思いついたものです。scrollViewShouldScrollToTop:重要なのは、メソッドをオーバーライドすることです。また、デフォルトの動作を防ぐために NO を返します。
注意すべきことの 1 つscrollViewShouldScrollToTop:は、スクロール ビューのコンテンツが既にスクロール ビューの上部にある場合は呼び出されないことです。以下のコードのトリックを参照してください。

@interface ViewController ()
<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.scrollView.contentSize = CGSizeMake(self.view.bounds.size.width,
                                             self.view.bounds.size.height * 2);

    // if the scrollView contentOffset is at the top
    // (0, 0) it won't call scrollViewShouldScrollToTop
    self.scrollView.contentOffset = CGPointMake(0, 1);
}

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
    // call your custom method and return YES
    [self scrollToBottom:scrollView];
    return NO;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // be sure that when you are at the top
    // the contentOffset.y = 1
    if (scrollView.contentOffset.y == 0)
    {
        scrollView.contentOffset = CGPointMake(0, 1);
    }
}

- (void)scrollToBottom:(UIScrollView *)scrollView
{
    // do whatever you want in your custom method.
    // here it scrolls to the bottom
    CGRect visibleRect = CGRectMake(0, scrollView.contentSize.height - 5, 1, 1);
    [scrollView scrollRectToVisible:visibleRect animated:YES];
}

@end
于 2012-10-11T20:14:30.737 に答える
0

これを試して:

- (void)myMethod {

    [myScrollableObject setScrollsToTop:NO];
}

UIScrollView を継承するすべてのオブジェクトには、このプロパティが必要です。

参照

于 2012-10-11T19:51:48.590 に答える