//@Geunwon,Mo 2010.9.17 : UIWebView 의 Javascript alert을 위한 카테고리.
@implementation UIWebView (JavaScriptAlert)
.... 저번포스트 생략 ....
static BOOL diagStat = NO; //예,아니오 버튼의 상태를 저장할 임시 변수
- (BOOL)webView:(UIWebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame{
NSLog(@"javascript ConfirmPanel : %@",message);
UIAlertView *confirmDiag = [[UIAlertView alloc] initWithTitle:nil message:message delegate:self cancelButtonTitle:NSLocalizedString(@"Yes", @"예") otherButtonTitles:NSLocalizedString(@"No", @"아니오"), nil];
[confirmDiag show];
//버튼 누르기전까지 지연.
while (confirmDiag.hidden == NO && confirmDiag.superview != nil)
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01f]];
[confirmDiag release];
return diagStat;
}
//요놈은 UIAlertViewDelegate 를 구현하여 버튼이 눌렸을때 실행될 메소드
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
//index 0 : YES , 1 : NO
if (buttonIndex == 0){
//return YES;
diagStat = YES;
} else if (buttonIndex == 1) {
//return NO;
diagStat = NO;
}
}
@end
'내가끄적인글 > 프로그래밍' 카테고리의 다른 글
[objC] 상위클래스에서 선언한 변수를 상속받은 클래스에서 undeclared 나는 경우.. (0) | 2011.02.11 |
---|---|
[cocos2d] 게임 개발 시작 (0) | 2011.01.31 |
[iOS] iOS (iPhone,iPod touch) 의 MKMapView 정리하기 (47) | 2010.11.18 |
[iOS] UIAlertView 를 모달(modal) 창 처럼, 버튼 누르기전까지 대기하기 (18) | 2010.10.01 |
[iOS] iOS(iPhone)의 UIWebView 에서 javascript 의 alert 을 UIAlertView 로 입맛에 맞게 변경하기 (8) | 2010.09.17 |
[android] Android 의 TableLayout 의 코너를 둥글게~ (Rounded corner) (19) | 2010.07.15 |
[android] Android 의 MapView (Google API) 정리하기. (128) | 2010.07.10 |
형~ 저 병돈입니다 ㅋㅋ
오랜만에 형 생각나서 구글에 형 이름 쳤더니 일로 인도하더군요 ~~ ㅋ
20page까지 역주행으로 잘봤습니다 ~ㅋ
종종 와서 좋은 사진 보고 갈게요 ㅋ
우~ 병돈아~ ㅋㅋ 반가버 일은 할만해?
비밀댓글입니다
앗 리에님 안녕하세요 ^^
날이 추운데 감기조심하시구 해당 이메일은 잘 저장해두도록 하겟습니다.
한국에 또 안놀러오시나요 ^^
좋은 정보네요~ 감사합니다 많은 도움이 되었어요
넵 감사합니다 ^^
좋은 정보네요.ㅎ 필요했는데...감사합니다. 출처 명시하고 퍼가도록 하겠습니다^^; 문제되면, 제 블로그에 말씀부탁드리겠습니다. 감사합니다~
문제될게 있을까요 ^^
더 좋은 방법 찾아내시면 알려주세요 ㅎ
흠 여쭤볼게 있는데요.. UIWebView+WebController.m 과 같이 해서 카테고리화해주고 말씀하신것 처럼 하면 alert을 이제 형태를 자유자재로 만들수 있게 되었습니다. 하지만 alert의 메세지(message) 자체를 WebController.m 에 있는 함수에 인자로 넘겨줄려면 어떻게 해야 하나요?
[sender.delegate getdata:message]; 와 같은건 통하질 않네요...
제가 초보인지라 셀렉터, 상호 정보 전달 등이 많이 개념이 꼬여있어요.. 그래도 조금 도움 부탁드릴게요. 감사합니다.
제가 질문을 제대로 이해했는지 모르겠지만..
쉽게 생각하시면 될것 같습니다.
- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
함수 등에서 받은 message 를 전역변수(또는 static)에 넣어서 다른 메소드에서 사용하거나
[self performSelector:@selector(aaa:) withObject:message];
등의 메소드를 사용해서 함수에 직접 넘겨주거나 하시면 될것 같습니다.
java-confirm에서 uialertview에서 리턴값을 어찌 받아와야 할지 모르던차에 검색해서 덕분에 해결했네요.감사합니다
도움이 되셨다니 다행입니다 ^^
정말 훌륭한 팁이 아닐 수 없네요.
이 팁이 아니었다면 정말 끔직합니다.
감사합니다.
도움이 되셨다니 다행입니다 ^^
UIAlertView 대기하기 찾다보니 들어왔네요.
글 쓰신대로 잠깐 해봤다가 더 좋은 방법이 없나 찾아보니, UIAlertView도 delegate가 있더라고요.
UIAlertView에서 delegate를 적당한 녀석으로 정해주고, 다음과 같은 녀석을 정해주면 되네요.
- ( void ) alertView:( UIAlertView * ) alertView clickedButtonAtIndex:( NSInteger ) buttonIndex
이렇게 하면 버튼 누르면 이쪽으로 와서 처리가 가능하네요.
물론 처리 순서를 다시 정해줘야 한다는 단점은 있지만, 무한 대기 시키는 것보다는 조금 나아보입니다.
이 댓글을 쓰는 때에는 이미 아셨을지도 모르겠네요. ^^
답변 감사합니다 ^^
- ( void ) alertView:( UIAlertView * ) alertView clickedButtonAtIndex:( NSInteger ) buttonIndex
는 위의 본문에서도 사용하고 있는 델리게이트입니다.
통상의 UIAlertView 의 버튼 액션은 이곳에서 해주는게 당연하지만
위의 경우엔 webview 에서 javascript 의 confirm 창이라는 함정이 있습니다;;
그래서 저런 꼼수를 썻는데 다시 보니 수정할곳이 많군요.
워낙 오래전에 만든거라.
tag 도 안쓰여있구요..
무한대기보다 분명 좋은 방법이 생길듯 합니다.
iOS6 에서 webView 에 대대적인 수정이 있는듯 합니다.
올라가면 생각해보죠 뭐 ㅋ
감사합니다 ^^
감사합니다 ~
별말씀을요~