Да, существует способ связать JavaScript из UIWebView с кодом Obj-C.
Установите свой делегат UIWebView и вставьте его в делегат следующим способом
//
// Map links starting with file://
// ending with #action
// with the action of the controller if it exists.
//
// Open other links in Safari.
- (BOOL)webView: (UIWebView*)webView shouldStartLoadWithRequest: (NSURLRequest*)request navigationType: (UIWebViewNavigationType)navigationType {
NSString *fragment, *scheme;
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[webView stopLoading];
fragment = [[request URL] fragment];
scheme = [[request URL] scheme];
if ([scheme isEqualToString: @"file"] && [self respondsToSelector: NSSelectorFromString(fragment)]) {
[self performSelector: NSSelectorFromString(fragment)];
return NO;
}
[[UIApplication sharedApplication] openURL: [request URL]];
}
return YES;
}
Затем вы можете написать методы Obj-C, которые будут обрабатывать запрос.Например.В вашем веб-представлении у вас может быть кнопка с тегом ссылки, например
<a href="file://myGreatApp.com/saveImage">Click Me to Save Image </a>
. Схема «file», фрагмент «saveImage».Теперь вы можете написать метод Obj-C
-(void)saveImage;
, который будет вызываться каждый раз, когда пользователь нажимает на ссылку.
Редактировать: Если вы хотите пройтистроковые параметры в вашем методе, просто добавьте их к URL-адресу вашего фрагмента, используя javascript.Таким образом, вместо этого у вас может быть
<a href="file://myGreatApp.com/saveImage*asdgo8asdgl35lkjasgd807ll12">Click Me to Save Image </a>
Затем в вашем коде Obj-C разбейте фрагмент на символ '*'.Используйте первую половину в качестве селектора, а вторую - в качестве параметра.