确定用户是否可以看到按钮

时间:2014-01-13 05:35:43

标签: ios iphone objective-c uiwebview uibutton

我有一个有趣的要求。我有一个webview,当用户刷新时,它的大小会扩大。这很好用,但现在我试图检测用户是否已滚动到顶部,以便我可以再次将其最小化。

我试图通过在webview后面放置一个图像来做到这一点,如果用户滚动浏览webview的顶部,则会发生反弹效果并且底层图像变得可见。我试图使用“隐藏”属性,认为图像在webview下隐藏,但在webview被拉下时可见。然而,这似乎无法正常工作。

任何人都对如何检测按钮/图像是否对用户可见有什么想法?

2 个答案:

答案 0 :(得分:2)

因为UIWebView实现了UIScrollViewDelegate,它声明符合该协议,所以您可以使用ScrollViewDidScroll委托方法。

首先确保您的UIWebView不在UIScrollView

  

重要提示:您不应该嵌入UIWebView或UITableView对象   UIScrollView对象。如果这样做,可能会导致意外行为   因为两个对象的触摸事件可能混淆错误   处理。

相反,您可以通过UIWebView属性访问UIScrollView,因为我们现在知道UIWebView基于UIScrollView。您的视图控制器可以实现UIScrollViewDelegate。

@interface MyViewController : UIViewController<UIScrollViewDelegate>
@end

然后你必须将webview中的scrollView属性设置为UIScrollViewDelegate,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Set the scrollView property's delegate protocol to self. This is so that this view controller will receive the delegate methods being fired when we interact with the scrollView.
    webView.scrollView.delegate = self;
}

我们只对ScrollView的委托方法之一 - scrollViewDidScroll感兴趣。然后你可以检测滚动视图何时在webview中滚动,并最终有一个简单的数学方程式来检查scrollView是否已滚动到顶部:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{   
    if(scrollView.contentOffset.y <= 0.0){
        NSLog(@"TOP REACHED so do the chicken dance");
    }
}

答案 1 :(得分:1)

如果是Y == 0,请查看Web视图滚动视图的contentOffset,这意味着用户已向上滚动到顶部。

CGRect visibleRect;
visibleRect.origin = webView.scrollView.contentOffset;
if(visibleRect.origin.y == 0)
{
//t means that user has scrolled up to the top
}