오늘의 주제

1. UIWebView
2. UIWebViewDelegate 



스물 여덟번째 시간입니다.^^

지난 번에는 웹뷰를 만들고 화면에 웹페이지를 띄워 만들어 보았습니다.

자 그럼 오늘은 웹뷰와 함께 이것저것 해 보아야 겠지요?ㅎ

긴 말 없이 시작해 봅니다 ㅎㅎ

p.s. 추천 한 방 어떠세요?ㅎ



# UIWebView - delegate

웹뷰를 화면에까지 띄워보았으니 이제는 앞으로 가기 뒤로가기 등,... 버튼 동작들을 구현해 봅니다.
자, 일단은 지난번에 버튼들에 태그를 달아 두었던 것 기억하시죠?
그 태그를 보다 직관적으로 표현해 보기 위하여 #define과 enum을 사용하여 구현해 보았습니다.
#define과 enum은 뭐냐구요?
아... 음... C에서 나오는 녀석들인데,

제가 C 카테고리에서 포스팅 한 줄 알고 있었는데, 아직 포스팅을 안했네요 ㅠ_ㅠ
iOS에 너무 열중을 하다보니;;ㅎㅎ

C 카테고리에서 포스팅 했습니다..ㅎ
한 번 읽어보세요..^^
2012/05/14 - [C] - C <15>. 전처리자
2012/05/24 - [C] - C <20>. enum

그냥 말 그대로 define (정의) 해 주는 전처리자 입니다.
전처리자는 뭐냐구요?
말그대로 전처리, 전에 미리 처리해 놓는다 이런거구요. 깊이 생각하실 필요없고 그냥
변수처럼 쓰이지만 바꿀 수 없는 static한 변수입니다.
물론... 변수와는 큰 차이가 있습니다만, 무시하세요 ㅎㅎ

이렇게 define과 enum을 사용하여 미리 태그들을 직관적으로 표현해 봅니다. 둘 중 하나만 해도 됩니다.
저는 그냥 아주 약간의 테크닉을 소개해 드리고자 이렇게 두 가지 표현 다 사용 해 본 것 뿐입니다..^^;


그리고 내려와서 지난 번에 만들어 두었던 barButtonClick: 메소드를 알차게 채워줍니다^^


짜잔~
실행해 보고 버튼을 눌러봅니다~

잘 동작 되시나요?ㅎ

그런데 코드에서 보면... 네 번째 function 버튼의 동작과 모양이 일치하지 않음을 알 수 있습니다. 그러면 웹뷰의 동작 상태에 따라
버튼의 모양을 상황에 맞게 변경해 주어야 겠지요?ㅎ

그러면 누군가 웹뷰의 상태를 보면서 웹뷰가 특정 행동을 할 때, 그에 맞는 상황 대처를 해 주어야 합니다.
그 녀석이 뭐라고 했죠?

네 맞습니다! delegate !!



# UIWebView - delegate

자, 그러면 Web View의 델리게이트에 대해 알아봐야겠습니다 ㅎㅎ
검색을 알차게 해 봅니다~
아직도 Documentation의 단축키를 모르신다구요?
ㅠ_ㅠ Command + Alt + Shift + / 입니다.
자, 그렇게 해서 레퍼런스를 찾아보니, 델리게이트가 해줄 수 있는 일들이 나오네요 ㅎ
우리가 필요한 것은 웹뷰가 로딩을 시작할 때, 그리고 끝냈을 때 입니다.
왜냐구요? 로딩을 시작하면 정지 버튼으로 변경 해 주고, 로딩이 끝나면 새로고침 버튼으로 변경 해줘야 하니까요 ~


자, 그럼 이 녀석들에 대한 설명을 읽고, 이녀석이다 싶으면 메소드를 복사 해 옵니다~



Bar Button은 툴바 안에 속해 있는 녀석이죠.
일단 그 녀석을 변경해 주려면 툴바의 도움이 필요할 것 같군요~
툴바의 아울렛을 선언 해 줍니다.



이렇게 이쁘게 연결이 되었겠죠?ㅎ


그리고 알차게 코드를 폭풍입력!!!!!!!!!!!!!
코드에 대한 설명은 주석으로 알차게 달려있답니다^^*


그리고 나서 동작 상태에 따라 버튼모양이 이쁘게 변하는지 확인 해 봅시다~

어떤가요?ㅎ

델리게이트라는 녀석 참 오묘하고 재미나지 않나요?

오늘은 여기 까~지~^^

다음에 또 만나요~



by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

댓글을 달아 주세요

  1. Favicon of http://blog.daum.net/exlikeus BlogIcon 몰락아티스트 2012.05.09 12:26  댓글주소  수정/삭제  댓글쓰기

    이런 개발하기 시리즈를 포스팅하는게 얼마나 힘들고 피곤한지 사람들이 모르는 걸까요?
    관심이 없어서 그런걸까요. 항상 수고하시는 IOS개발하기 시리즈를 지켜보고 있습니다.
    댓글과 추천뿐이지만, 힘내시고 항상 정성스러운 포스팅 감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.09 15:52 신고  댓글주소  수정/삭제

      ㅎㅎ 안녕하세요~
      아티스트님 글 잘 보고 있습니다...
      저도 오늘 지나치기만 하고 댓글을 못달았네요 ㅠ_ㅠ
      저부터 반성을...ㅋㅋ
      저도 아티스트님께서 포스팅하신 인기 블로그에 관한 글처럼 인기블로그에 속하고 싶네요...^^
      물론 제 욕심일 뿐이지만요 ㅋ

  2. 생초보 2012.05.10 02:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님~ 생~ 초보입니다

    프로그램에 ㅍ 자 도 모르는 상태에서 첨부터 쭉~ 다 읽어보면서 따라도 해보니 다 이해는 못해도 감은 오는거 같네요

    단지 앱을 만들고 싶어서 공부를 시작했는데 맘이 급해서 그런지 만들고싶은 앱과 관련된 부분은 눈에 잘들어오는데
    그 외 부분은 대충대충 이해 못하고 넘어가게 되고....

    오늘은 #define <--요놈을 알게되서 너무 기분이 좋아요~ ㅎㅎ

    다음 강좌도 잘~ 부탁드립니다 감사합니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.10 09:16 신고  댓글주소  수정/삭제

      ^^ 안녕하세요~
      제 목표와 조금은 부합한 결과를 이끌어 낸 것 같아 기분이 좋습니다^^*
      마음이 급하다고 기초와 기본, 그리고 중요한 부분을 놓치는 경우가 많고, 저 또한 그랬었는데 누누히 말씀드리지만 간과하고 넘어가서는 안될 부분들이 많습니다..^^
      물론 이제 기초부분이 아니라 기본 부분으로 접어들었지만서도 기초를 탄탄히 하시기 바랍니다!^^
      생초보님의 응원으로 힘이 납니다!!ㅎㅎ
      #define 녀석은 잘 사용하면 편하고 좋지만, 위험요소가 너무나 많은 녀석입니다.
      꼭 필요할때만 적당히 사용하시고, 그 외에 다른 방법들도 많으니 enum, const 상수 등을 사용하시기를 권고드립니다. (검색해 보시면 define의 단점이랑 그 외에 다른 대체방법이 나올거예요)
      그럼 자주자주 놀러오시고 댓글도 많이 많이 주세요~^^
      필요한 부분 있으면 말씀해 주시구요 ㅎ
      그럼 좋은하루 되세요~^^*

  3. 인절미후후 2012.06.06 16:49  댓글주소  수정/삭제  댓글쓰기

    아니 이거슨!!!(이것은 이라고 적는게 맞습니다.)
    바 버튼 바꾸기군요 제가 이전에 바 버튼 체인지를 시도하다가 포기했었는데
    폭풍코딩중에 너무 반가와서(반가워서가 맞는말입니다.) 중간에 글남깁니다.

    제가 이런저런 검색으로 알아낸것은 애플에서 제공해주는 이미지 버튼(play/stop/refresh/rewind같은)은
    체인지를 할수 없고 정 사용하고 싶으면 같은 자리에 버튼을 두개주고 히든과 비지블(hidden = NO)을 번갈아가면서
    사용하라고 하더군요 (카메라 커스텀 할 때 사용해 봤습니다.카메라를 온/오프 가능하게 하고 on시에만 사진마크가 뜨도록 하는 거였죠)
    코딩 다 하고 다시 소감 남길게요 감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.06 17:51 신고  댓글주소  수정/삭제

      아하~! 그런 방법도 있었군요 ㅎㅎ
      미쳐 생각하지 못했네용 ㅎ
      이런 귀차니즘같은...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
      좋은 부연설명 고맙습니다 ^^*
      오늘 폭풍 댓글 받으니 기분 너무 좋네요 ㅎㅎ (정말 좋네요가 맞는 말입니다.)

  4. 지문 2012.06.06 18:39  댓글주소  수정/삭제  댓글쓰기

    초보라, 맥부기에서 야곰님 강좌 본적이 있어서 왔습니다.
    맥부기에도 질문 올렸지만 아직 해결이 안되어서요.
    RUN했을때, 시뮬레이터5.1가 xcode(4.3.2) 상에서 바로 뜨지를 않고
    장면이 바뀌면서 바탕화면이나, 크롬화면위에서 시뮬레이터가 뜹니다.
    시뮬레이터를 xcode화면 위에서 뜨게 하고 싶은데,,어떻게 하는지요?
    너무 초보적인 질문이라서,,,망설이다가 올려봅니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.07 01:33 신고  댓글주소  수정/삭제

      글쎄요..^^;
      무슨말인지 완전히 이해가 가진 않지만,
      다음 번에 실행될었으면 하는 자리에서 시뮬레이터를 종료 해 보세요.
      다음 번에 실행 될 때 시뮬레이터가 지난 번에 실행되었던 자리에서 실행 될 겁니다.
      적절한 답변이었으면 좋겠네요^^;;;

  5. yuyu 2012.06.21 18:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좀 여쭤보고 싶은게 있는데요.
    앱에서 사진을 찍은 위치의 위도와 경도를 알수 있나요?
    그리고 위치서비스를 사용자 동의없이 자동으로 활성화 시키는 것도 가능한가요?
    아니면 자동으로 활성화 시키면 안되는 규정이라도 있나요?
    아무리 찾아봐도 모르겠네요.
    알고계시면 좀 알려주세요~ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.22 11:39 신고  댓글주소  수정/삭제

      지난 번이랑 질문이 똑같으시네요...^^;
      지난 번에 답변 드렸었는데...
      그래서 저도 답변을 복사해왔습니다 ^^
      그리고 사진에서 위치 가져오는 방법은
      http://stackoverflow.com/questions/1238838/uiimagepickercontroller-and-extracting-exif-data-from-existing-photos
      http://stackoverflow.com/questions/616346/iphone-access-location-information-from-a-photo
      참고하세요~
      ============================
      상식적으로 당연히 사용자의 허가 없이는 그 무엇도 불가능 합니다...
      그런 규정이 명시되어있는지는 모르겠지만, 사용자의 위치정보를 무단 수집하는 행위이므로 어플리케이션에서 임의로 사용자 위치정보를 사용할 수 없습니다.
      사용자가 허가 하여야 합니다.

    • yuyu 2012.06.26 13:27  댓글주소  수정/삭제

      안녕하세요.
      답변 정말 감사드립니다.
      전에 제가 올린 글은 너무 예전 글에 올려서 지우고 다시 올린건데 안지워졌나보네요.ㅎ
      ================================
      위치정보 무단 수집은 당연히 불법인거 아는데,
      애플에서 사용자 허가 없이는 위치정보 수집을 하면 안된다는 조항을 회사에서 꼭 찾아야 한다는데,
      아무리 찾아도 못 찾겠네요ㅠ
      혹시 아시나 싶어서 여쭤본거에요.ㅎ
      더 찾아봐야겠네요.ㅋ

      다시한번 답변 감사드립니다.^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 16:06 신고  댓글주소  수정/삭제

      음... 그런 조항에 대해서는 확인해 본 적이 없어서요 ㅠ_ㅠ 구글신께서 답을 내려 주셨기를... :-)

  6. Sio 2012.07.18 17:25  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~~~!!
    음.. itemStyle에 따라서 FuncButton을 바꾸는 부분에서요...
    저는 바뀌는 모습이 보이지 않습니다 ㅜㅜ;;;;;
    시뮬레이터로 아무리 돌려도 변하는 모습이 보이질 않네요 ....

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.18 19:04 신고  댓글주소  수정/삭제

      음.. 웹뷰의 델리게이트가 연결되어있나 확인해 보세요~^^*

    • Sio 2012.07.19 11:22  댓글주소  수정/삭제

      아하하;; 할때 뭘 잘못 해서 xib를 싹 지웠다가 다시 했더니 delegate 연결을 깜박했네요 ㅡㅡ;;;
      한번 해봤으니 혼자해봐야지 하면서 나름대로 다시 해봤는데도 역시 하나씩 빠트리네요 ㅋㅋㅋ
      이젠 아주아주 잘됩니다~! 감사합니당^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.20 09:07 신고  댓글주소  수정/삭제

      잘 동작된다니 다행입니다 ㅎ

  7. 리현 2012.07.27 04:39  댓글주소  수정/삭제  댓글쓰기

    당큐~~아파서 잠시 쉬고 다시왔더염 ㅎㅎㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.27 13:11 신고  댓글주소  수정/삭제

      에고...ㅠㅠ 아프면 안돼요~
      저도 며칠 아프고 이제 좀 정신 차렸는데, 혼자사는데 아프니까 서러워요 ㅠㅠㅠ

  8. 나에게넌 2012.08.13 10:39  댓글주소  수정/삭제  댓글쓰기

    계속 쪽쪽 빨아갑니다..오늘 강의 다 볼꺼에요 ㅎㅎ 항상 감사합니다..

  9. 감사합니다. 2012.10.17 17:19  댓글주소  수정/삭제  댓글쓰기

    yagom님 덕에 정말 많이 배우고 있습니다.

    근데 ios6으로 넘어오면서 더이상
    [self dismissModalViewControllerAnimated:YES]; 코드가 안먹는거 같아요..

    그래서
    [self dismissViewControllerAnimated:YES completion:nil]; 요걸로 바꾸니 정상 작동하는군요.

    스토리 보드로 yagom님 강좌 다 따라하는데 정말 재밌네요.
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.20 10:43 신고  댓글주소  수정/삭제

      안녕하세요 :)
      말씀하신 내용이 맞습니다.
      iOS6에서 변경된 부분 중 하나인데요, iOS6미만 기기에서도 호환이 되게 만들으려면 버전체크를 해서 적절한 메소드를 호출해 주어야겠죠?ㅎ
      찾아주셔서 정말 고맙습니다.
      필요한 내용 말씀해 주시면 피드백 하도록 노력하겠습니다 ^^*

  10. 2012.10.31 15:40  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.01 09:37 신고  댓글주소  수정/삭제

      안녕하세요 앱만들자님 :)
      applicationDidBecomeActive 메소드와 applicationWillResignActive 두 메소드를 이용하시면 될 것 같습니다 ^^*
      찾아주셔서 정말 고맙습니다 ㅎ
      추운날씨 감기 조심하셔요~

  11. 이춘홍 2014.01.04 22:52  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 소중한 정보 잘 보고 질문드립니다.

    제가 앱개발을 처음해봐서 웹뷰의 사용시 애플 앱심사에 결격사유가 어느정도인지 궁금합니다.
    혹시 앱심사를 잘 통과할 수 있는 노하우가 있을까요~?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.01.05 20:05 신고  댓글주소  수정/삭제

      안녕하세요, 방문해 주셔서 고맙습니다 ^^

      앱 심사 기준은 기본 틀은 크게 변하지 않지만 간간히 변하기 때문에 수시로 확인을 해주시는 것이 좋습니다.

      https://developer.apple.com/appstore/guidelines.html

      이곳에 가시면 앱 심사 가이드라인이 있습니다.

      제가 아무리 말씀드려도, 개인마다 어떤 기준의 체감이 다르기 때문에 가이드라인을 읽어보시고 애매한 부분이나 궁금한 부분이 있다면 애플에 직접 이메일로 문의해 보시는 것도 좋은 방법입니다 :)