최초 작성일 : 2010/03/12 09:43



MyViewController.h


#import <UIKit/UIKit.h>


//UIViewController을 상속받고

//UITextFieldDelegate 프로토콜을 따르는 뷰 컨트롤러 선언

@interface MyViewController : UIViewController <UITextFieldDelegate> {

//nib 파일 내의 객체와 연결될 인스턴스 변수 선언

//텍스트필드와 라벨과 연결됨

IBOutlet UITextField *textField;

IBOutlet UILabel *label;


//문자열 형식의 인스턴스 변수 선언

NSString *string;

}


//@property를 통한 접근자와 변경자 선언 간편화

@property (nonatomicretain) UITextField *textField;

@property (nonatomicretain) UILabel *label;

@property (nonatomiccopy) NSString *string;


//구현해야 할 메서드 선언 : 텍스트필드에서 입력받은 문자열을 라벨로 업데이트 함

- (void)updateString;


@end



MyViewController.m


#import "MyViewController.h"



@implementation MyViewController


//헤더 파일의 @property와 짝을 이루어 접근자와 변경자 자동 생성

@synthesize textField;

@synthesize label;

@synthesize string;


//뷰가 로드된 이후 호출되는 함수로 다른 nib 객체들에 대한 접근도 가능하다.

//주로 컨트롤러가 생성될 때 초기화 하는 내용이 들어감

- (void)viewDidLoad {

    // When the user starts typing, show the clear button in the text field.

  // 사용자의 키 입력이 시작되면 텍스트필드에 클리어 버튼을 보여주도록 설정

    textField.clearButtonMode = UITextFieldViewModeWhileEditing;


    // When the view first loads, display the placeholder text that's in the

    // text field in the label.

    // 뷰가 처음 로드되면 텍스트필드의 placeholder에 있는 텍스트를 라벨에 보여줌

    // placeholder는 텍스트필드에 입력된 문자열이 없을 경우 보여지게 될 기본 문자열을 저장하는

    // UITextField 클래스의 속성

    label.text = textField.placeholder;

}


//사용자 구현 메서드

//이 클래스의 인스턴스 변수인 string에 텍스트필드에 입력된 문자열을 대입하고

//다시 이 인스턴스 변수 string의 값을 label에 대입함

- (void)updateString {

// Store the text of the text field in the 'string' instance variable.

// textFeield.text는 텍스트필드에 입력받은 문자열을 저장하고 있는 UITextField 클래스의 속성

self.string = textField.text;


        // Set the text of the label to the value of the 'string' instance variable.

// label.text는 label을 통해 보여지게 될 문자열을 저장하고 있는 UILabel 클래스의 속성

label.text = self.string;

}


//UITextFieldDelegate 프로토콜에 있는 인스턴스 메서드

//텍스트필드 내에서 리턴키가 입력된 경우의 처리를 담당함

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

// When the user presses return,

// take focus away from the text field so that the keyboard is dismissed.

// 텍스트필드에서 리턴키가 입력되면 키보드를 사라지게 하고 updateString 메서드를 호출하여

//  텍스트필드에 입력된 값을 label에 넣도록 함

if (theTextField == textField) {

[textField resignFirstResponder];


        // Invoke the method that changes the greeting.

        [self updateString];

}

return YES;

}


//UIResponder 클래스에 있는 인스턴스 메서드

//UIResponder 클래스는 객체들의 이벤트에 응답하고 이벤트를 핸들링하는 클래스로

//UIApplicationUIView 등의 클래스들의 상위 클래스이다.

//touchesBegan는 뷰나 윈도우상에 한 개 이상의 손가락 터치가 일어난 경우 이 이벤트를 받아 처리한다.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    // Dismiss the keyboard when the view outside the text field is touched.

  // 뷰에서 텍스트필드 영역 밖에 터치가 발생한 경우 키보드를 감춘다.

    [textField resignFirstResponder];


    // Revert the text field to the previous value.

  // 텍스트필드의 문자열은 이전 문자열로 바꾼다.

    textField.text = self.string;


  // 부모 클래스의 touchesBegan 메서드 호출

    [super touchesBegan:touches withEvent:event];

}


//메모리 해제

- (void)dealloc {

// To adhere to memory management rules, release the instance variables.

    // 'textField' and 'label' are objects in the nib file and are created when the nib

    // is loaded.

[textField release];

[label release];

[super dealloc];

}



@end


참고문헌 :
[시작하세요 아이폰 3 프로그래밍], 위키북스
[예제로 시작하는 아이폰 개발], 에이콘

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^