iOS 디자인 모드 - 의뢰 (delegate)
7266 단어 iOS
대리 란 무엇 입 니까?
애플 의 공식 문 서 는 명확 하 게 설명 했다.
Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object. The delegating object keeps a reference to the other object—the delegate—and at the appropriate time sends a message to it. The message informs the delegate of an event that the delegating object is about to handle or has just handled. The delegate may respond to the message by updating the appearance or state of itself or other objects in the application, and in some cases it can return a value that affects how an impending event is handled. The main value of delegation is that it allows you to easily customize the behavior of several objects in one central object.
다시 말 하면 대 리 는 간단 하고 기능 이 강 한 디자인 모델 로 이런 모델 은 한 대상 이 다른 대상 과 프로그램 에서 다른 대상 과 상호작용 을 하 는 데 사용 된다.주 대상 (delegating object 를 말 합 니 다) 에서 프 록 시 (delegate) 의 인용 을 유지 하고 적당 한 시기 에 이 프 록 시 에 메 시 지 를 보 냅 니 다.이 메 시 지 는 "대리" 의 주 대상 이 곧 처리 하거나 이미 어떤 사건 을 처리 했다 는 것 을 알 립 니 다.이 에이 전 트 는 자신 이나 다른 대상 의 UI 인터페이스 나 다른 상 태 를 업데이트 하여 주 대상 이 보 낸 이 이벤트 의 메시지 에 응답 할 수 있 습 니 다.혹은 어떤 경우 에 발생 할 다른 사건 을 어떻게 처리 해 야 하 는 지 에 영향 을 줄 수 있 는 값 을 되 돌려 줄 수 있 습 니 다.대리 의 주요 가 치 는 여러 대상 의 행동 을 쉽게 맞 출 수 있다 는 것 이다.여기 있 는 대 리 는 명사 입 니 다. 그 자체 가 대상 입 니 다. 이 대상 은 대리 대상 에 의 해 프로그램의 다른 대상 과 접촉 하 는 것 을 전문 적 으로 대표 합 니 다.
코코아 에이전트
Cocoa Touch 프레임 워 크 에서 프 록 시 라 는 디자인 모델 을 대량으로 사 용 했 습 니 다. 모든 UI 컨트롤 류 에서 id 의 delegate 나 dataSource 라 고 밝 혔 습 니 다. Cocoa 의 헤더 파일 을 보면 다음 과 같은 속성 을 많이 발견 할 수 있 습 니 다.
@property(nonatomic, assign)id
보통 @ property (nonatomic, assign)id> delegate; 즉, 이 대 리 는 특정한 협 의 를 따라 야 한다. 즉, 이 협 의 를 따 르 는 대상 만 이 대리 자격 을 갖 춘 다 는 것 이다.이 동시에 프 록 시 클래스 는 헤더 파일 에 이 protocol 을 따라 야 한다 고 밝 혀 야 합 니 다.name 프로 토 콜 을 실행 하고 그 중의 @ required 방법 을 실현 합 니 다. @ optional 방법 은 선택 할 수 있 습 니 다.
UIAction Sheet 을 예 로 들 면, 이 View 의 어떤 단 추 를 눌 렀 을 때 UIAction Sheet 을 터치 합 니 다. 사용자 가 UIAction Sheet 에 대해 어떤 조작 을 완 료 했 을 때, 예 를 들 어 Destruct 단추 가 눌 렸 거나 cancel 단추 가 눌 렸 을 때, UIAction Sheet 은 delegate 에 이 자 를 보 내 고 delegate 가 사용자 작업 에 대한 응답 을 완성 합 니 다.예 를 들 어 화면 에 문자열 을 인쇄 합 니 다.그림 설명 은 다음 과 같다.
우선, 우 리 는 tab 기반 프로젝트 를 만 들 고 FirstView Controller. h 에 코드 를 추가 하여 UIAction SheetDelegate 프로 토 콜 을 따 르 도록 합 니 다.
@interface FirstViewController : UIViewController
View 에 이 ActionSheet 을 실행 하려 면 단 추 를 추가 하고 이 단추 의 응답 코드 를 작성 하 십시오.
- (IBAction)invokeActionSheet:(id)sender {
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"Delegate Example"
delegate:self // telling this class(ViewController) to implement UIActionSheetDelegate
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"Destruct"
otherButtonTitles:@"Button 1",@"Button 2",nil];
[actionSheet showInView:self.tabBarController.view];
[actionSheet release];
}
위 에 중요 한 설정 이 있 습 니 다. 매개 변수 에 delegate: self 가 있 습 니 다. 이 설정 은 UIAction Sheet 의 프 록 시 를 self, 즉 First View Controller 로 가리 키 는 것 입 니 다.
그리고 First View Controller. m 에서 UIAction Sheet Delegate 를 실현 하 는 방법:
#pragma mark --UIActionSheet delegate methods
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
switch (buttonIndex) {
case 0:
self.myTextFromActionSheet.text = @"Action Destructed!";
break;
case 1:
self.myTextFromActionSheet.text = @"Action Button 1 Clicked!";
break;
case 2:
self.myTextFromActionSheet.text = @"Action Button 2 Clicked!";
break;
case 3:
self.myTextFromActionSheet.text = @"Cancel Button Clicked!";
break;
default:
break;
}
}
위의 몇 단계 에서 우 리 는 코코아 의 UIAction Sheet 기 존 대리 에 대한 운용 을 완성 했다.그러나 우 리 는 스스로 맞 춤 형 대 리 를 만들어 야 할 때 가 많 습 니 다. 어떻게 실현 해 야 합 니까?
사용자 정의 에이전트
우리 가 해 야 할 일 은 view 를 만 들 고 프 록 시 를 사용자 정의 하여 이 view 의 문자열 을 업데이트 하 는 것 입 니 다.위 에서 우 리 는 이미 tab 프로젝트 를 만들어 서 안의 second view 를 빌 렸 다.ChangeText 라 는 단 추 를 끌 어 옵 니 다. 응답 함 수 는 - (IBAction) changeText: (id) sender 입 니 다.이 단 추 를 누 르 면 modal view 이름 이 ChangeTextView 에 들 어 갑 니 다. 저 희 는 ChangeTextView 에 문자열 을 입력 하고 이 view 를 종료 한 후에 이 문자열 을 second view 에 업데이트 합 니 다.어떻게 modal view 와 second view 간 의 데이터 전달 을 실현 합 니까?바로 대리!누구의 대리 입 니까?ChangeTextView 의 에이전트!ChangeTextView 에 데 이 터 를 직접 입력 하기 때문에 에이전트 가 입력 한 문자열 을 second view 에 피드백 해 야 합 니 다.
1. 새로운 종류의 ChangeTextView Controller 를 만 들 고 해당 하 는 xib 파일 을 만 듭 니 다.
2. ChangeTextView Controller. h 에서 프로 토 콜 ChangeTextView Delegate 를 설명 합 니 다.
@protocol ChangeTextViewDelegate
- (void) textEntered:(NSString*) text;
@end
UIAction Sheet 과 유사 합 니 다. ChangeTextView Controller 에 도 프 록 시 성명 을 추가 해 야 합 니 다.
@property (assign, nonatomic) id delegate;
3. ChangeTextView Controller. xib 에 단추 save 를 추가 해 야 합 니 다. 이 단 추 를 누 르 면 second view 로 돌아 가 문자열 을 업데이트 합 니 다.save 단추 에 대한 응답 함 수 는:
- (IBAction)saveButtonClicked:(id)sender {
//Is anyone listening
if([delegate respondsToSelector:@selector(textEntered:)])
{
//send the delegate function with the amount entered by the user
[delegate textEntered:textEntered.text];
}
[self dismissModalViewControllerAnimated:YES];
}
[delegate textEntered:textEntered.text];이 코드 의 의 미 는 ChangeTextView Controller 알림 에이전트 입 니 다. textEntered 이 사건 이 발생 했 습 니 다. textEntered 라 는 메시지 의 실현, 즉 이 textentered 에 어떻게 응답 하 는 지 는 에이전트 에서 이 루어 집 니 다.이 예 에서 SecondView Controller 는 Change TextView Controller 대상 의 대리 입 니 다.따라서 저 희 는 SecondView Controller 에 대해 해당 하 는 설정 을 해서 대리 의 조건 을 만족 시 켜 야 합 니 다.우선, SecondViewController. h 에서 협 의 를 따 르 겠 다 고 밝 혔 습 니 다. ChangeTextViewDelegate.그리고 ChangeText 단추 의 응답 함수 - (IBAction) changeText: (id) sender 를 편집 합 니 다.
- (IBAction)changeText:(id)sender {
ChangeTextViewController *CTViewController = [[ChangeTextViewController alloc] initWithNibName:@"ChangeTextViewController" bundle:nil];
//Assign this class to the delegate of ChangeTextViewController,
//remember to make thie ViewController confirm to protocol "ChangeTextViewDelegate"
//which is delared in file ChangeTextViewController.h
CTViewController.delegate = self;
[self presentModalViewController:CTViewController animated:YES];
}
주의, CTViewController. delegate = self;이 문장 은 SecondViewController 가 ChangeTextViewController 대상 이 되 는 대 리 를 실현 했다.
본 논문 에 대응 하 는 소스 코드 다운로드:http://download.csdn.net/detail/lovefqing/4874331
만약 본 논문 에 잘못된 점 이 있다 면 벽돌 을 치 며 지적 하고 함께 발전 하 는 것 을 환영 합 니 다. 감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.