C <15>. 전처리자

C 2012.05.14 12:30

오늘의 주제

1. #define 
2. #ifdef 



열 다섯번째 시간입니다.^^

지난 번에는 배열에 대해 알아보았는데, 흥미로우셨나요?
배열은 두고두고 계속 사용하게 되니까 잘 알아두셔야 합니다~
게다가 배열과 포인터는 뗄 수 없는 관계이므로 꼭 기억해 두세요 ㅎ

이번엔 전처리자에 대해 알아봅니다.
스따뚜~~~~~~~~~~~~

그 전에 추천 한 방 어떠세요?ㅎ


# 전처리자

전처리자는 전처리 명령을 수행하는 녀석입니다.

전처리 명령은 '#'으로 시작하게 됩니다. 

우리가 흔히 볼 수 있는 전처리 명령에는 #include가 있겠죠?

이 전처리 명령은 컴파일이 시작되기 전에 처리가 되게 됩니다.

그래서 이름이 전처리 명령이죠..^^

이 전처리 명령을 수행하는 전처리기는 C언어의 문법을 알지 못합니다.

어쨋든 이 전처리 명령은 우리가 잘만 활용을 하면 유용하게 사용할 수 있습니다^^

일단 처음에 소개할 녀석은

#define 이라는 녀석입니다.

간단한 예제로 시작해 볼게요~




#define 이라는 녀석은

define... 말 그대로 정의 해 주는 녀석입니다.

이녀석은 이거다!!! 이렇게요 ㅎ

선언 방법은

#define 이녀석 이거

입니다.

위의 그림을 보시면 MAX(a, b) 라는 녀석은 (a>=b ? a :b ) 라고 알아먹어라.

라는 이야기가 되지요.

위의 뜻이 이해가 안가신다구요? 3항연산자를 모르신다구요? 안돼요 ㅠㅠ
2012/01/28 - [C] - C <8>. 조건문(3) 3항 연산자

ㅋㅋ 여튼 define 해줄때 뿐만 아니라 모든 전처리 명령에서는 뒤에 세미콜론 (;)을 붙이지 않습니다.

위의 예제를 실행해 봅시다.


이런 결과가 나오게 되네요~

#define 이라는 녀석 조금은 감이 오시나요?ㅎ

다음에는 char 형을 파라메터로 넣어 봅시다.

이렇듯이 define하여 '매크로화' 된 녀석의 파라메터로 들어가는 값은 어떤 형식이든지 상관이 없습니다. 왜냐면 이 녀석은 C의 문법을 모르기 때문이지요.
그만큼 편리하지만 그만큼 무서운 녀석입니다.
잘못된 인자(파라메터)를 받고서도 무작정 실행 해 버리기 때문에 warning이나 error가 발생하지 않기 때문에 나중에 프로그램에 문제가 생겼을 때 그 원인을 찾기가 힘들어 집니다...
물론 위의 예제는 에러나 워닝의 요소는 아닙니다..^^;

자, 다음에 소개드릴 녀석은 #ifdef 라는 녀석입니다.

말 그대로 '만약 이녀석이 define 되어 있다면...' 이런 뜻입니다.

 #ifdef 이녀석

이런 표현이 되겠지요?

우리가 if 를 쓸 때 else 라는 녀석이 따라왔지요. 여기서도 마찬가지 입니다~

#else가 따라옵니다 ㅎ

거기에 덧붙여 #ifdef를 끝마친다는 의미의 #endif도 추가적으로 따라옵니다.


위의 그림에서는 MODE_DEBUG가 #define 이 되어있기 때문에 #ifdef안의 문장이 실행이 됩니다.

만약 MODE_DEBUG가 #define되어 있지 않다면 어떻게 되는지 봅시다.


요로코롬 #else 에 속해있는 녀석이 실행이 되겠지요..^^

이 #ifdef 같이 되어있는 녀석은 if와는 다른점이 컴파일 되기도 전에 해당사항이 없다면 컴파일 되지 않게 된다는 점입니다.

즉, 프로그램 안에 영영 속하지 않게 된다는 뜻이 겠지요~

그 다음에 살펴볼 녀석은

#undef 라는 녀석입니다.

말 그대로 define되어 있던 녀석을 해제하는 녀석입니다.

예제를 통해 볼까요?


#define으로 정의되어 있던 SUM(a, b)라는 녀석을 define 해제시키고 새로 define한 예제입니다. 지난 define값이 없어지고 새로 define 되었지요..^^

이 외에도 ifdef말고도 

#if

#ifelse

등을 쓸 수도 있습니다.

한 번 시도해 보세요~^^

그러나 이 전처리자의 무서움은 C문법을 알고있지 않다는 점에 있습니다.

함부로 사용하게 되면 복잡한 프로그램에서는 피를 보는 결말을 보게되지요..^^;

그러므로 적절히 사용하는 것이 좋습니다.

이 전처리 명령을 대체할 수 있는 방법들이 몇 가지 있습니다.

enum을 사용해도 좋고, const변수를 사요해도 좋습니다.

물론 꼭 define을 사용해야 하는 경우도 생기지만 말입니다~


위의 그림을 보고 코드를 이해해 보세요..^^

구글링을 해 보셔도 좋습니다~

전처리 명령은 잘만 사용하면 효과적인 프로그래밍에 많은 도움이 됩니다.

꼭 기억해 두세요~^^

오늘은 여기 까~~~~~~~~지~~~~~~~~~

by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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



'C' 카테고리의 다른 글

C <17>. 동적할당  (2) 2012.05.18
C <16>. 구조체  (2) 2012.05.16
C <15>. 전처리자  (0) 2012.05.14
C <14>. 배열  (4) 2012.05.11
C <13>. 변수의 범위  (0) 2012.04.05
C <12>. 함수  (4) 2012.04.02
Posted by yagom

C <14>. 배열

C 2012.05.11 12:30

오늘의 주제

1. 배열 


열 네번째 시간입니다.^^

지난 번에는 변수의 범위에 대하여 알아보았습니다.
감이 조금 오실지는 잘 모르겠습니다^^;
혹여나 부족한 부분이 있다면 말씀해 주세요 ㅎ
이번에는 또 하나 중요한 개념인 배열에 대하여 알아보도록 하겠습니다.

출발!!!!

자, 시작전에 추천 한 방 어떠세요?ㅎ



# 배열이란?

자, 배열이란 무엇일까요?

配列
 
나눌 배, 벌일 열.

사전에는
"동일한 성격의 데이터를 관리하기 쉽도록 하나로 묶는 ."
이라고 정의되어 있네요 ㅎ

자, 쉽게 한 번 알아봅시다.



위에는 제가 발로그린 배열의 개념도 입니다.

위의 정의에서 보듯이 배열은 같은 종류의 데이터를 줄세워 놓은 녀석을 말합니다.

그림에서 보듯이 배열은 같은 크기의 상자들이 쭈욱 붙어서 늘어서 있습니다. 
 
배열의 선언방법은

자료형 배열이름[배열크기];

입니다.

초기화 방법은 여러가지가 있습니다만 

5개의 배열에 하나씩 넣어주려면 위의 그림처럼 초기화 해 줄 수 있구요,

int arr[100] = { 0, };

으로 초기화하면 모든 원소의 값이 0으로 초기화 됩니다.

배열의 index는 0부터 시작합니다.

위의 그림에도 보듯이 5칸 배열을 선언을 해 주었는데

index는 0부터 시작을 하므로 index값이 0으로 시작하여 4로 끝나게 되지요.

위의 그림에서 

rgIntArray[0]에는 1이, rgIntArray[1]에는 3이... 이런식으로 들어가 있을 겁니다.

그래서 맨 첫칸의 자료를 변경하거나 읽어오려면 rgIntArray[0] 라고 하면 변수처럼 사용이 가능한 것입니다.

개념이 조금 잡히시나요?

배열은 단지 같은 유형의 데이터를 쭈욱 늘어놓은 것이라고 생각하시면 되겠습니다.^^


# 배열과 포인터
 

여기서 배열의 비밀을 하나 말씀드리려 합니다.

배열을 사용하게되면 같은 유형의 자료들을 모아놓고 쓸 수 있는 편한점이 있지만 이 외에도 좋은 점이 있습니다.

배열 자체를 포인터로 접근이 가능하다는 점입니다.

포인터에 대해서 잘 모르시겠다구요?

지난 포스팅을 참고해 주세요...^^

2012/03/23 - [C] - C <10>. 포인터 (1)개념잡기
2012/03/27 - [C] - C <11>. 포인터 (2)간단실습

'배열을 포인터로 사용이 가능하다고???'

무슨 말일까요?



자. 배열에서 각각의 자료를 불러오거나 저장할 때

배열명[index]로 변수처럼 사용한다고 말씀드렸죠?

그런데 만약에 함수(2012/04/02 - [C] - C <12>. 함수)를 사용할 때, 인자로 배열을 넘겨야 할 때...

이녀석들을 하나하나 다 넘길 수가 없겠죠?

그래서 인자를 넘길때는 해당 자료형의 포인터값으로 넘어가게 됩니다.

그래서 함수 안에서 이 배열 통채를 사용 할 수 있게 됩니다.

배열의 원소들은 메모리 안에서 위에 그림처럼 다닥다닥 붙어있게 됩니다.

그렇기 때문에 배열의 첫머리의 주소만 알면 그 다음녀석, 그 다다음 녀석도 메모리상의 어느 위치에 있는지 쉽게 알 수 있게되는거죠.

이해가 되시려나요? +_+

그래서 그림처럼 rgIntArray 라고 변수처럼 사용하면 이녀석은 배열의 첫 번째 원소를 가리키는 포인터값입니다.

그녀석에 +1을 해주면 그 다음칸 녀석의 주소를 가리키게 되는 것입니다. 그런식으로 rgIntArray+2면 rgIntArray의 주소값이 겠죠?

이해가 안되면 실습으로 궁금증을 풀어봅시다..ㅎㅎ

# 실습해보기 

자세한 코드 설명은 주석에 달려있으므로 참고하시기 바랍니다~!
yagom.h 파일에는

#include <stdio.h>
#include <stdlib.h>

만 작성되어 있습니다.



자, 실행 결과입니다.
자신의 실행결과와 일치하나요?ㅎ


여기까지 배열에 관하여 간단히 알아보았습니다.

문자 배열 ( char[] )는 문자열로 사용이 가능합니다.

printf와 같은 함수에서 %s로 문자열 출력이 가능하지요.

대신 문자열의 맨 마지막은 null (\0)으로 끝나야 합니다.

2차원, 다차원 배열도 있지만 그것도 어렵게 생각하실 필요가 없습니다.

쉽게 쉽게 생각해 보세요~

따로 포스팅할 필요를 잘 못느껴서 하진 않지만,

누군가 요청해 주시면 다차원 배열에 대해서도 한 번 알아보도록 하겠습니다~^^&


자, 그럼 여기서 생길만한 의문점..!!

Q : 배열을 생성해 놓고 배열의 크기나 종류를 변경 할 수는 없나요?
A : 네, 불가능 합니다. 그렇기 때문에 동적할당이라는 녀석을 사용하게 되는데, 추후에 포스팅 할 예정입니다.

다른 의문점이 또 있다면 댓글 주세요..^^

또 필요한 것이 있다면 말씀해 주세요 ㅎ

by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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



'C' 카테고리의 다른 글

C <16>. 구조체  (2) 2012.05.16
C <15>. 전처리자  (0) 2012.05.14
C <14>. 배열  (4) 2012.05.11
C <13>. 변수의 범위  (0) 2012.04.05
C <12>. 함수  (4) 2012.04.02
C <11>. 포인터 (2)간단실습  (0) 2012.03.27
Posted by yagom

오늘의 주제

1. UIAlertView


스물 아홉번째 시간입니다.^^

지난 번까지는 웹뷰에 대해서 알아보았습니다.

이번에는 AlertView에 대해서 알아보도록 하겠습니다.

AlertView는 xib에서 생성이 되지 않고 코드로 생성을 해 주어야 합니다.ㅎ

그럼 일단 시작해 봅시다~!

# UIAlertView

자, 일단 AlertView는 delegate가 없으면 무용지물입니다.
이녀석은 그냥 얼굴만 비출 뿐 아무것도 하지 않으려고 합니다.
그래서 우리는 ViewControllerForWeb에게 AlertView의 델리게이트를 해달라고 말할거예요.


자, 그리고 AlertView도 하나가 아니면 구분을 할 수 없기 때문에 태그를 넣어줄 예정이예요.
그래서 enum으로 먼저 어떻게 해줄지 정해줍니다.
enum은 첫 번째 수를 지정해 주고, 쭈욱 써주면 자동으로 하나씩 숫자가 늘어서 등록이 되어요.
첫 번째 녀석이 1이면 두 번째는 2, 세 번째오는 녀석은 3... 이런식으로요~


자, 그리고 나서 전에 작성했던 코드들을 조금 수정해 봅니다.


자, 실행 해 봅시다.
이렇게 얼럿이 뜨는게 보이시나요?ㅎ
버튼을 눌러봅니다.


반응이 없어요..ㅋㅋㅋ 네... 아까 말씀드렸듯이 이녀석은 그냥 얼굴만 비출 뿐 아무것도 하지 않으려고 합니다.
그래서 우리는 델리게이트에게 일을 맡겨야 해요.

자, 오늘도 어김없이 레퍼런스를 뒤적뒤적 합니다~
어김없이 커맨드 쉬프트 알트 / 를 누릅니다.
검색을 쇼숑~
아래 보니 사용자가 버튼을 클릭했을 때 무엇을 해줄지 말해줄 수 있는 메소드가 있군요.


이녀석에 대해 설명을 보니 유저가 버튼을 통해 대답을 하면 델리게이트에게 무엇을 할지 말해 줄 수 있는 녀석인 것 같네요.
복사해옵니다 ㅎㅎ


그리고 처리해줄 델리게이트인 ViewControllerForWeb에서 구현해 줍니다.

우리가 원하는 기능에 대해서 잘 써줍니다.
역시나 설명은 주석으로^^

 
짜잔~ 실행해서 눌러보면 어떤가요?ㅎ
잘 동작하나요?


정말 종료하시겠습니까?

예.

그러므로 오늘 포스팅은 여기까~지 ㅋㅋㅋㅋㅋㅋㅋㅋ

다음에 보아용~^^


by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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



Posted by yagom

오늘의 주제

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. UIWebView 
2. UIToolBar



스물 일곱번째 시간입니다.^^

지난 번까지는 프로젝트를 계속 사용했는데, 이번에 새로 프로젝트를 하나 만들어 보겠습니다.
어찌되었든간 지난 번 까지 했던 내용들은 마음에 드셨는지 모르겠습니다...^^
지금까지 해 본것들은 예제이고 앞으로도 예제를 통해 내용이 진행되니, 디자인이 이쁘지 않더라도, 지금 당장 뭐가 없어보여도 쭉 한번 따라해 보세요..^^
그럼 어느순간 머릿속에 정리가 되고 느낌이 올 때가 있습니다.
그 때, 필요한 것들만 검색하고 취합해서 자신만의 프로젝트를 만들어 가시면 됩니다.
아직 그정도는 안온 것 같죠?ㅎ

그럼 오늘 또 새로운 세상을 향하여 한 걸음 내딛어 봅시다^^

출발~!



# UIWebView, UIToolBar

UIWebView...
음~ 이녀석은 뭘까요?ㅎ
딱, 이름만 봐도 웹뷰.
즉, 웹페이지를 보여주는 녀석이라는 것을 알 수 있죠?ㅎ

오늘은 이녀석과 한 번 놀아봅시다^^

아까 말씀드린대로 오늘은 새로운 프로젝트를 생성하여 진행 하도록 하겠습니다.
물론 이후 포스팅에서도 이 프로젝트를 계속 사용할 예정입니다~
프로젝트 템플릿은 Single View Application으로 하겠습니다.


프로젝트 이름은 WithYagom으로 했구요~
아래 여러 옵션들을 유심히 보시고, 실수 하지 않도록 하세요~
질문 주시는 분들중에 스토리 보드에 체크하고 프로젝트를 생성하셔서 질문하시는 분들이 몇분 계시더라구요^^;
너무 조급히 생각하지 마시고 천천히 꼼꼼하게 보며 진행하시기 바랍니다.
조급히 달리다 보면 소소한 기초들과 개념들을 놓치게 됩니다~!


일단 앞으로 당분간은 세로모드 고정으로 진행할 계획입니다.~



자, 새로운 프로젝트를 생성하고, 이제 WebView를 얹어 볼 새로운 뷰 컨트롤러 생성을 할 차례입니다.
WithYagom폴더에서 오른쪽 버튼 또는 커맨드 클릭을 하여 New File을 선택합니다.


Objective-C class를 선택해 주시구요~


클래스 이름은 ViewControllerForWeb이라고 하겠습니다. XIB파일 생성에도 체크해 주시구요~


자, 이렇게 새로운 클래스가 생성되었죠?
그런데 이렇게 클래스를 새로 생성 할때마다 파일이 쭉쭉 늘어나고 복잡해 지는데... 정말 많아지면 정신없겠죠? (지난 프로젝트 한 번 보세요..ㅎㅎ)
이참에 정리를 좀 해볼까요?


WithYagom폴더에서 우클릭을 하고 NewGroup을 선택합니다.


새로운 그룸이 생성되면 이름을 써서 그룹을 만들어 주고, 파일들을 알맞게 정리해 줍니다. 저는 이런식으로 정리를 해 보았습니다~
자, 좀 깔끔하죠?ㅎ


그렇다면 이제 본격적으로 시작해 봅시다.
ViewControllerForWeb.xib파일로 이동합니다.
ToolBar라는 녀석을 하단에 쭈욱 넣어주시고,
Bar Button Item이라는 녀석을 하나 넣고, Flexible Space Bar Button Item 을 넣고, 다시 BarButton Item을 넣고...
그렇게 Bar Button Item을 다섯 개 넣어줍니다.


자, 그리고 Bar Button Item들의 이름을 이렇게 바꿔주시고요~
ToolBar위쪽으로 Web View를 똻~~!!!!!!! 올려줍니다~


그리고 오른쪽 버튼을 누른 상태로 File's Owner로 쭈욱 끌어당겨 줍니다.


그리고 delegate를 클릭!!
이제 이 클래스(ViewControllerForWeb)의 인스턴스가 이 WebView의 delegate가 됨을 말하는 것입니다. WebView의 동작처리를 ViewControllerForWeb이라는 녀석이 하겠다는 뜻이죠?


그 이후에 Assistance 모드로 전환해서 ViewControllerForWeb.h파일에다가 아울렛을 선언해 줍니다.



자, 그러면 ViewControllerForWeb.h에 이렇게 이쁘게 생성이 되겠죠?ㅎ



자, 그럼 이제 Bar Button Item들도 액션 선언을 해 주어야 하는데, Bar Button Item 선택이 한 번에 안됩니다.
버튼을 누르면 처음에 Tool Bar 전체가 선택이 됩니다. 그러면 그 후에 버튼을 한 번 더 눌러주면 그 때 버튼이 선택이 됩니다.
(아래 두 그림을 참고하세요)


자, 그러면 첫 번째 버튼의 액션을 연결 해 봅시다.
오른쪽버튼을 누른채로 쭈욱 당여옵니다.
그 후에 액션을 아래처럼 연결해 주시구요. 이 그림만 보고 성질 급하게 다섯 번 째 까지 연결 하실 분들을 위해 한 줄 더 쓰고 다음 그림으로 갑니다 ㅋㅋ
두 번 째 버튼부터는 아래 그림을 참고하세요.


두 번 째 버튼부터는 위에 만들어 두었던 메소드로 연결을 해줍니다.
오른쪽 버튼을 가지고 쭈욱 끌어서 만들어 놓은 메소드 위로 올리면 Connect Action이라고 나옵니다. 그 때 마우스를 떼면 빤짝빤짝 해요~
연결 된 겁니다.


자, 그런데 버튼들에 이름을 직접 새겨 넣는 것 보다 좀 더 직관적으로 표현해 보고 싶습니다.
네 번째 새로고침 버튼의 스타일을 변경 해 봅시다. 좀 더 직관적으로 보이죠?ㅎ


 다섯 번 째 녀석도 한 번 바꿔 봅니다. 물론 실제로 컬업으로 닫히게 하지는 않을거예요..ㅎㅎ 그냥 스타일 한 번 줘 봅니다~



그리고 이제부터 첫 번째 버튼 부터 태그를 하나씩 지정해 줍니다.
태그는 그 녀석만의 식별 숫자라고 생각하시면 되겠습니다.
물론 다른 객체도 같은 태그를 가질 수 있습니다만, 객체별로 구분하고 싶다면 태그를 다르게 입력해 주는게 좋겠죠?
첫 번째 버튼의 태그는 10


두 번째는 20


세 번째는 30... 네 번째 다섯 번 째 까지 쭈욱 넣어줍니다.



그 후에 이제 메인 뷰 컨트롤러인 ViewController.xib로 이동하여 버튼을 하나 만들어 줍니다.
그리고 액션을 그림처럼 연결 해 주세요~


그리고는 새로 우리가 만든 클래스의 헤더를 import 해 주시고,
버튼과 연결된 메소드인 webButtonClick: 에 내용을 넣어줍니다.
코드는 아래 소스의 주석을 확인하세요.^^


그리고 ViewControllerForWeb.m으로 옵니다.
아래 소스를 작성해 주세요.


실행해 봅니다~!
자, 잘 나오나요?ㅎ
아래 툴바의 버튼들은 아무 동작을 하지 않죠?ㅎ 물론 우리가 아무것도 작성하지 않았기 때문이죠..^^;



오늘은 여기까지..ㅎ

오늘은 양이 많았지만, 결국 나온것은 웹페이지 하나 띄워 본 것 뿐이네요 ㅎㅎ
하지만 다음 포스팅의 밑거름들을 쭈아악~~~~~ 깔아 놓은 것이니 다음 포스팅에서는 좀 더 알찬 내용이 나올 것이라고 믿어 의심치 않습니다 ㅎㅎ

그럼 다음에 뵈어요~^^

뾰봉~


by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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



Posted by yagom