屏幕上显示UIView
和UIWebView
。当我点击网站上的文本字段时,网页视图内容正在上升。我怎么能强迫UIView
移动呢?
答案 0 :(得分:7)
您可以订阅UIKeyboardWillShowNotification
或UIKeyboardDidShowNotification
,并在收到通知时移动UIView
。这个过程在这里描述:
答案 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];
}