최초 작성일 : 2010/03/12 09:43
#import <UIKit/UIKit.h>
//UIViewController을 상속받고
//UITextFieldDelegate 프로토콜을 따르는 뷰 컨트롤러 선언
@interface MyViewController : UIViewController <UITextFieldDelegate> {
//nib 파일 내의 객체와 연결될 인스턴스 변수 선언
//텍스트필드와 라벨과 연결됨
IBOutlet UITextField *textField;
IBOutlet UILabel *label;
//문자열 형식의 인스턴스 변수 선언
NSString *string;
}
//@property를 통한 접근자와 변경자 선언 간편화
@property (nonatomic, retain) UITextField *textField;
@property (nonatomic, retain) UILabel *label;
@property (nonatomic, copy) NSString *string;
//구현해야 할 메서드 선언 : 텍스트필드에서 입력받은 문자열을 라벨로 업데이트 함
- (void)updateString;
@end
#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 클래스는 객체들의 이벤트에 응답하고 이벤트를 핸들링하는 클래스로
//UIApplication, UIView 등의 클래스들의 상위 클래스이다.
//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
참고문헌 :
'Development > iPhone' 카테고리의 다른 글
[옛 글] Hello World - Interface Builder : File's Owner (0) | 2013.07.05 |
---|---|
[옛 글] Hello World - Interface Builder : Library 창 (0) | 2013.07.05 |
[옛 글] Hello World - HelloWorldAppDelegate.h, HelloWorldAppDelegate.m (0) | 2013.07.05 |
[옛 글] Hello World - main.m, ..._Prefix.pch (0) | 2013.07.04 |
[옛 글] Hello World - 소스 목록 (0) | 2013.07.04 |