以编程方式点击状态栏后如何触发“scrollsToTop”?

Posted

技术标签:

【中文标题】以编程方式点击状态栏后如何触发“scrollsToTop”?【英文标题】:How to fire "scrollsToTop" after tapping the status bar programmatically? 【发布时间】:2012-02-29 14:45:58 【问题描述】:

如果用户点击导航栏标题,我想触发当您以编程方式点击状态栏时触发的 scrollsToTop 函数。

这是我目前的方法。

[tableView_ setContentOffset:CGPointMake(0, 0) animated:YES];
[tableView_ flashScrollIndicators];

但是,它不会像您点击状态栏以滚动到顶部那样为 ScrollIndicators 设置动画。

任何帮助将不胜感激,谢谢!

【问题讨论】:

【参考方案1】:

您是否尝试过将 -setContentOffset:animated 与 UIScrollViewDelegate 方法 - (void)scrollViewDidScrollToTop: 和/或 -(void)scrollViewDidEndScrollingAnimation: 结合使用?

您也许可以将您的-flashScrollIndicators 发送到其中之一,而不是依赖计时器,即使用-performSelector:withObject:afterDelay)。

【讨论】:

【参考方案2】:

试试类似的东西

-(void)doScroll
    void (^scroll)(void) = ^
        [contentTableView setContentOffset:CGPointMake(0, 0) animated:NO];
        [contentTableView flashScrollIndicators];
    ;

    [UIView animateWithDuration:0.5 animations:scroll];


- (void)viewDidLoad 
    [super viewDidLoad];
    [self performSelector:@selector(doScroll) withObject:nil afterDelay:1];

【讨论】:

感谢 Friedgaad,但是在此方法中滚动时表格视图单元格会消失 _ 我刚刚在 tableview 上测试了这个,如果我的视图被动画化(在我的情况下是翻转),单元格就会消失。所以我添加了一个 performSelector:@selector afterDelay: 然后显示单元格。 谢谢,但我得到 [ReadItLaterViewController scroll]: unrecognized selector sent to instance 0x8bee9a0 after loading my app。看来我需要清除“滚动”,但我无法在@interface 中清除此 void (^scroll)(void)。抱歉我的知识有限,这个函数可能是C?而且,是否有任何理由使用 CGPointMake(0, 3000) 而不是 (0,0) ? 另外,如果我将当前表格视图滚动到可以看到第 9 个表格视图单元格的位置,并触发 doscroll 方法,表格视图单元格就会消失。但是,如果我只是将表格视图滚动到底部一点,并触发 doscroll 方法,它只会滚动到带有指示条的顶部。 我刚刚从自己的代码中复制/粘贴错误,应该是@selector(doscroll) 和CGPointMake(0,0)!【参考方案3】:

在 Web 视图的 ShouldStartLoadWithRequest Delegate 方法中试试这个

    ((UIScrollView *)[[self.challengeWebView subviews] objectAtIndex:0]).scrollsToTop = NO;

【讨论】:

以上是关于以编程方式点击状态栏后如何触发“scrollsToTop”?的主要内容,如果未能解决你的问题,请参考以下文章

定义状态变量后以编程方式推送视图

如何以编程方式触发 NavigationLink?

在 JavaScript 中,我可以以编程方式为文件输入元素触发“点击”事件吗?

使用 Kendo UI Mobile 以编程方式触发点击事件

PWA:如何以编程方式触发:“添加到主屏幕”?在 iOS Safari 上

ios隐藏状态栏后向下移动ui视图