UIWebView在文本域焦点后滚动

时间:2011-08-29 12:10:59

标签: ios objective-c uiwebview

屏幕上显示UIViewUIWebView。当我点击网站上的文本字段时,网页视图内容正在上升。我怎么能强迫UIView移动呢?

5 个答案:

答案 0 :(得分:7)

您可以订阅UIKeyboardWillShowNotificationUIKeyboardDidShowNotification,并在收到通知时移动UIView。这个过程在这里描述:

Text, Web, and Editing Programming Guide for iOS: “Moving Content That Is Located Under the Keyboard”

答案 1 :(得分:5)

也许这会有所帮助:我不想让UIWebView完全滚动,包括专注于文本字段时。

您必须是UIWebView的代表:

_webView.scrollView.delegate = self;

然后添加此方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    scrollView.contentOffset = CGPointZero;
}

答案 2 :(得分:2)

UIWebView有一个回调:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

每当要加载新的URL请求时,都会触发此操作。从javascript开始,您可以在标记的onfocus事件上触发新的请求网址,其中包含以下自定义模式:

window.location = "webViewCallback://somefunction";

这是一个脚本,可以将您的自定义事件放入任何要加载的html页面中。

在将它加载到UIWebView之前,您必须获取整个HTML,如下所示:

NSString *html = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"your URL"] encoding:NSUTF8StringEncoding error:nil];

然后在适当的地方在HTML文本中插入以下内容:

<script>
    var inputs = document.getElementsByTagName('input');

    for(int i = 0; i < inputs.length; i++)
    {
        if(inputs[i].type = "text")
        {
             inputs[i].onfocus += "javascript:triggerCallback()";
        }
    }

 function triggerCallback()
 {
      window.location = "webViewCallback://somefunction";
 }
</script>

然后,在回调中你应该做这样的事情:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( [[inRequest URL] scheme] == @"webViewCallback" ) {

        //Change the views position 

        return NO;
    }

    return YES;
}

就是这样。希望它有所帮助。

答案 3 :(得分:1)

哇,前几天我遇到了同样的问题,真的很烦人。我发现window.yPageOffset正在发生变化,但据我所知,当它发生变化时,没有任何事件可以被绑定。但也许它会以某种方式帮助你。 ;-)

答案 4 :(得分:0)

我认为你覆盖了scrollViewDidScroll错误。 您需要为UIWevView实现自定义类并覆盖scrollViewDidScroll

 - (void) scrollViewDidScroll:(UIScrollView *)scrollView{
        [super scrollViewDidScroll:scrollView];
        [((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];
    }