UIWebView имеет обратный вызов:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
Это срабатывает всякий раз, когда собирается загрузить новый URL-запрос.С помощью javascript вы можете инициировать новый URL-адрес запроса для события onfocus тега с пользовательской схемой, например:
window.location = "webViewCallback://somefunction";
Вот скрипт, который помещает ваше пользовательское событие внутри любой HTML-страницы для загрузки.*
Вам нужно будет получить весь HTML-код перед его загрузкой в UIWebView следующим образом:
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;
}
Вот и все.Надеюсь, это поможет.