하이브리드 앱을 하게되면 100% 쓸일이 있는 구문이다.
보통 웹에서 네이티브로 무언가를 통지하고 싶을때 사용된다.
javascript에서는 아래와 같이 한다.
window.location = "jscall://callObjectiveCFromJavascript"
위의 javascript가 호출이 되면
ios에서는 webView의 delegate메소드 webview:souldStartLoadWithRequest:naviationType 메소드를 호출된다.
이때 특정 메소드가 실행되게 구현하면 된다. 테스트용이라 간단히 log출력만 하도록 해보자.
- (void) callObjectiveCFromJavascript {
NSLog(@"callobjective-c from javascript");
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
if ([[[request URL] absoluteString] hasPrefix:@"jscall:"]) {
NSString *requestString = [[request URL] absoluteString];
NSArray *components = [requestString componentsSeparatedByString:@"://"];
NSString *functionName = [components objectAtIndex:1];
[self performSelector:NSSelectorFromString(functionName)];
return NO;
}
return YES;
}
하이브리드 앱을 만들때는 유용하게 쓰이니 꼭 알아두도록 하자.
'DirTy™의 하루일과 > DirTy™의 가당찮은iOS' 카테고리의 다른 글
[IOS] uinavigationcontroller swipe back disable 하기 (0) | 2016.01.15 |
---|---|
[IOS] 객체에 객체를 추가해보자! Associated Objects (0) | 2015.12.15 |
[IOS] objective-c, swift closure 구문 (0) | 2015.11.23 |
[IOS] APNS 인증서 만들기 (8) | 2015.10.27 |
[IOS] containerview를 사용해보자. (0) | 2015.10.26 |