본문 바로가기

개발/IOS

IOS 개발 시작하기(변수 선언, 버튼액션, 배열, 파일읽어오기)

일단 저는 아직까지는 IOS개발자가 아닙니다...ㅎ 저도 요즘 관심을 가지고 배우고 있는 과정이라 조금 잘못된 설명이나
표준적인 방법이 아닌수도 있습니다. 틀린부분이나 잘못된 부분이 있다면 지적해 주시면 감사하겠습니다.^^

Xcode 설치하기 - 이거는 IOS개발을 하려면 당연하겠죠^^? OSX가 설치되어 있는 맥도 있어야겠구요^^

Xcode 프로젝트 만들기

Single view application으로 만들기를 합니다. 



Storyborads 설정은 아직 하지 않기로 합니다...ㅎ


ViewController.xib - view담당하는 인터페이스 레이아웃 파일입니다.
ViewController.h - 인터페이스 컨트롤러 클레스의 해더 파일로 해당인터 페이스에서 사용하는 변수, object, event 들을 정의합니다.
ViewController.m - 레이웃파일이 이 파일과 연결 되어 있으며 해당 view의 컨트롤러 역활을 하게됩니다.

자 그럼 Array 에 'Daum', 'Tistory', 'Naver'를 넣고 버튼을 누루면 랜덤으로 배열에 있는 값을 꺼내어 화면에 표시하는 앱을 만들어봅시다~

ViewController.h 파일

먼저 배열로 사용할 myQuotes를 정의합니다.
@property (nonatomic, retain) NSArray *myQuotes;

@property - 사용할 프로퍼티를 지정합니다.

nonatomic - 접근자와 수정자 메서드의 생성 방식을 지정합니다. 기본값으로는 다중 스레드 프로그램을 개발할 때 도움이 되는 추가 코드를 사용해 생성됩니다. 이런 추가적인 코드는 크게 부담되지는 않지만, 사용자 인터페이스 객체에 대한 포인터를 선언할 때는 사길 전혀 필요가 없어 nonatomic으로 어트리뷰트 값을 지정해 이런 추가 부담을 없앱니다.

retain - 이 소성에 대입한 객체에 대한 컴파일러가 retain메시지를 보내게 합니다. 이러헥 하면 내부 인스턴스 변수를 사용하는 중에는 변수가 메모리에서 제거되지 않습니다.이 속성을 지정하는 이유는 기본값에 해당하는 속성으로 선언을 한것들을 가비지 컬렉션을 함으로 구분을 해야 하기 때문이다. 보통 개게에 해당하는 소성을 정의 할때는 retain을 선언 하고 int나 원시 데이터 타입을 선언할때는 retain을 선언하지 않는다.

* - 포인트을 사용하겠다는 뭐 기본적으로 사용하면 되겠습니다.


그리고 화면에 글시를 표시해주기 위해서 각 뷰화면과 연결시켜줄 인자 quote_text를 선언합니다.

나중에 화면에 표시하기위해서 myQuotes에서 하나의 string을 뽑아서 quote_text의 text(quote_text.text)에 넣으면

화면에 표시되는기위한 초석입니다.

@property (nonatomic, retain) IBOutlet UITextView *quote_text;

IBOutlet - 컨트롤러 헤어 파일에서 선언한 객체를 인터페이스 빌더가 알아 볼 수 있도록 해준다. 이것이 없다면 인터페이스 빌더는 어떻게 객채들과 연결해야 할지 모른체 빌드가 실행된다.


다음에 outlet으로 지정한 것을 action을 통해서 보여지게 되는게 해당 어떤엑션이 일어났을때 보내겠고 하는걸 지정합니다.

-(IBAction)quote_btn_touch:(id)sender;

IBAction - IBAction이 선언되면 이 메소드가 앤ㄱ션 메소드라는 것을 인터페이스 빌더에게 알려주게되며, 컨트롤러를 통해서 호출이 가능해 진다.

ViewController.m 파일

변수로 지정한 myQuotes, quote_text를 사용하도록 만듭니다.

@synthesize myQuotes;

@synthesize quote_text;

@synthesize - .h에서 정의한 프로퍼티 *myQuotes를 실체화하며 내부전역변수로 만들어주고, getter, setter 함수를 자동으로 만들어준다.


NSArray로 선언한 myQuotes에 Daum, Tistory, Naver를 넣고 저장하기

self.myQuotes = [NSArray arrayWithObjects:@"Daum", @"Tistory", @"Naver", nil];

self - 현재의 인스턴스 코드상에서는 상위 전역 인스턴스를 지칭한다.

NSArray - 배열로 선언

arrayWithObjects - 오브젝트로 구성된 array


인제 화면에 버튼을 눌렀을때를 action에서 대해서 만들어봅니다.

- (IBAction)quote_btn_touch:(id)sender {

int array_tot = [self.myQuotes count];//랜덤하게 보여주기위해서 먼저 myQuotes의 개수를 구합니다.

int index = (arc4random() % array_tot);//그리고 배열의 키값을 랜덤하게 받아옵니다.

NSString *my_quote = [self.myQuotes objectAtIndex:index];//그리고 지연변수에 값을 입력.

self.quote_text.text = [NSString arrayWithFormat:@"Quote : %@", my_quote];

// UI 변수로 지정한 quote_text에 text속성값에 Quote : 값 이 들어가도록 set을 합니다.

}

이제 컨트롤러는 다 만들었습니다. 인제 view에 해당하는 .xib 혹은 .nib 파일에 배열에 넣은 값이 보여지는 Text View 오브젝트와 사용자기 누룰수 있는 round button 오브젝트를 넣고 해당 컨트롤러와 연결을 하도록하면 완성입니다.

viewController_iphone.xib파일을 선택해봅니다.


그럼 모눈종이 위에 아이폰이 빈화면이 나옵니다. 이화면위로 Text View 오브젝트와 button을 드레그해서 올려놓고

Text View에는 위에 만들어 두었던 quote_text를 연결해줄것이고, button에는 quote_btn_touch를 연결할껍니다.



위 두개의 오브젝트를 해당 아이폰화면으로 드래그하고 사이즈를 잘 조정해서 정리하면 대충 아래 모양이 됩니다.

인제 앞에 만들어두었던 quote_text와 조금 전에 만들었던 Text View 오프젝트를 마우스 드레그로 연결합니다.


Text View 오프젝트를 선택하고 오른쪽 사이드바 상단에서 가장 오른쪽 탭인 conection inspector를 선택하고

New Referencing Outlets 항목의 O 영역에 마우스를 오버하면 + 버튼이 생기고 마우스 클릭을 하고 드래그를 하여

왼쪽 사이드바의 File's Owner에 가져다 놓으면 아래 그림 처럼 일전에 만들었던 quote_text가 나타납니다.

quote_text를 클릭하면 아래와 같이 Referencing Outlets 에 quote_text와 연결된것을 볼수 있습니다.

그리고 Quote 버튼도 클릭해서 상세정보를하고 이번에는 Touch Up Inside 를 드레그 하여 quote_btn_touch와 연결을

시켜주면 됩니다.



자 인제 끝났습니다. 해당 view파일도 저장을 하고 Xcode상단에 Simulator를 iphone 바꾸고 RUN을 실행하게되면


이렇게 나오고 Quote를 눌렀을때 Text View 화면에 해당 스트링이 랜덤으로 나오게 되면 성공입니다^^

다음에는 Table view 프로젝트를 해보도록 하겠습니다....ㅎ 그리고 Storyborad도 활용해보도록 하려구요.