(iOS,Xcode)有没有办法覆盖“点击状态栏向上滚动”行为?

时间:2012-10-11 19:46:27

标签: ios xcode uiscrollview uitextview

iOS中的标准手势之一是,通过点击状态栏(屏幕顶部的栏以及信号电平,电池强度等),将自动滚动任何内容(例如,在表格视图中) ,滚动视图等)到顶部。

我正在编写一个与聊天服务器连接的应用程序。收到新的聊天消息后,它们会被添加到UITextView的底部。用户可以回滚查看以前的聊天记录。

是否可以覆盖“点击状态栏”快捷方式,以便不是滚动到顶部,而是可以调用我自己的方法之一? (我的视图控制器中有一个方法可以自动将聊天窗口滚动到底部)。

2 个答案:

答案 0 :(得分:1)

这就是我想出的。关键是覆盖scrollViewShouldScrollToTop:方法。并返回NO以防止默认行为 需要注意的一点是,如果滚动视图的内容已经位于滚动视图的顶部,则不会调用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

答案 1 :(得分:0)

试试这个:

- (void)myMethod {

    [myScrollableObject setScrollsToTop:NO];
}

继承UIScrollView的任何对象都应具有此属性。

Reference