- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
이 둘은 테이블을 나타내기 위해 필수적으로 구현해야 하는 Delegate 이며, 이외에도
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;
등의 Delegate를 구현함으로써 편집 기능등을 사용할 수 있습니다.
이 뿐 아니라, 터치 이벤트, HTTP 호출, 글쓰기 등 많은 부분에서 사용되는 패턴이 바로 Delegate 패턴입니다.
이번 회에서는 Delegate 에 대한 간략한 설명을 하고
다음 회에 직접 Delegate를 만드는 코드를 선보이도록 하겠습니다.
우선 Delegate는 @interface 가 아닌 @protocol 입니다.
Apple Developer Documentation 에서는 Protocols 에 대하여 아래와 같이 설명하고 있습니다.
Protocols declare methods that can be implemented by any class. Protocols are useful in at least three situations:
To declare methods that others are expected to implement
To declare the interface to an object while concealing its class
To capture similarities among classes that are not hierarchically related
어렵게 써놓은 듯 한데.. 결국은 상속관계가 아닌 어느 클래스에서나 사용될 수 있는 선언된 메소드 라는 뜻으로 보이네요.
Delegate 에는 두가지 메소드 형식이 있습니다.
하나는 @required 로 선언된 영역이며, 다른 하나는 @optional 로 선언된 영역입니다.
@required 는 해당 Delegate 를 사용한다면 반드시 구현을 해야 하는 필수 메소드입니다.
UITableDataSource 의 메소드들을 예로 들어보겠습니다.
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
첫번째 메소드 tableView:numberOfRowsInSection: 은 테이블안의 셀 갯수를 리턴해 주는 역할을 하며,
두번째 메소드 tableView:cellForRowAtIndexPath: 는 테이블안의 내용 (TableViewCell) 를 리턴해 주는 역할을 합니다.
@optional 은 선택해서 사용할 수 있는 메소드로
UITextFieldDelegate 의
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
등을 예로 들 수 있습니다.
위 메소드는 글자가 입력되는 이벤트를 받았을때, 해당 textField 객체, range, 입력되거나 바뀌는 replacementString 을 파라미터로 받고 안의 처리를 통해서 입력을 해도 되는지를 BOOL 값으로 리턴합니다.
Text Filed 의 글자 수를 제한하거나 특정 문자를 제한하려 할 때 사용할 수 있는 Delegate 입니다.
다음 회에서는 이러한 Delegate 를 직접 만들어 보는 코드를 소개하도록 하겠습니다.
'Computer' 카테고리의 다른 글
iPhone user Agent (0) | 2010.05.25 |
---|---|
iPhone - Delegate 만들기 - 2 (0) | 2010.05.25 |
iPhone NSUserDefaults 사용하기 (0) | 2010.05.25 |
iPhone Property list - info.plist 에 추가하는 Property (0) | 2010.05.24 |
[Ubuntu] SVN Client 설정 (2) | 2008.08.04 |