以编程方式点击状态栏后如何触发“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”?的主要内容,如果未能解决你的问题,请参考以下文章
在 JavaScript 中,我可以以编程方式为文件输入元素触发“点击”事件吗?
使用 Kendo UI Mobile 以编程方式触发点击事件