프로토콜 전송 값

3219 단어
지난 글은 속성의 전방향 후전값이 후방에서 전방향으로 전해지는 것을 소개했지만 실제 응용에서 후방에서 전방향으로 전해지는 값은 일반적으로 프로토콜로 전해지는 것으로 속성 전해지지 않는다. 다음은 어떤 속성이 전해지는지 알아보자.
우리는 프로그램에서 배운다
// FirstViewController.h

#import 

@interface FirstViewController : UIViewController

@end


// FirstViewController.m

#import "FirstViewController.h"
#import "SecViewController.h"
//     
@interface FirstViewController () 
@property (nonatomic, strong) UILabel *label;

@end

@implementation FirstViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationController.navigationBar.translucent   = NO;
self.label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 100, 30)];
self.label.backgroundColor = [UIColor greenColor];
self.label.textAlignment = 1;
[self.view addSubview:self.label];

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(50, 50, 100, 30);
button.backgroundColor = [UIColor cyanColor];
[button setTitle:@"   " forState:UIControlStateNormal];
[button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}

- (void)click:(UIButton *)button {
SecViewController *secVC = [[SecViewController alloc] init];
//      
secVC.delegate = self;
[self.navigationController pushViewController:secVC animated:YES];
}
//       
- (void)passValue:(NSString *)str {
self.label.text = str;
}

// SecViewController.h

#import 
//     
@protocol passStr 
//       
- (void)passValue:(NSString *)str;

@end

@interface SecViewController : UIViewController
@property (nonatomic, copy) NSString *labelTitle;
//      
@property (nonatomic, weak) id  delegate;

@end

// SecViewController.m

#import "SecViewController.h"

@interface SecViewController ()
@property (nonatomic, strong) UITextField *textField;

@end

@implementation SecViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationController.navigationBar.translucent = NO;
self.view.backgroundColor = [UIColor yellowColor];
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 180, 30)];
self.textField.backgroundColor = [UIColor redColor];
//
self.textField.text = self.labelTitle;
[self.view addSubview:self.textField];

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeSystem];
backButton.frame = CGRectMake(50, 100, 100, 30);
backButton.backgroundColor = [UIColor greenColor];
[backButton addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:backButton];
NSLog(@"%@",   self.navigationController.viewControllers);
}

- (void)click:(UIButton *)button {
//       
[self.delegate passValue:self.textField.text];
[self.navigationController popToRootViewControllerAnimated:YES];
}

프로토콜 전송은 모두 6단계로 나뉘어집니다(뒤에서 앞으로 전송)
  • 성명 협의(2페이지의.h에서 협의한 성명은 협의 방법의 성명도 포함)
  • 성명대리인(2페이지의.h에서)
  • 협의 체결(첫 페이지의.m에서)
  • 지정대리인(첫 페이지의.m에서 클릭하는 방법 중)
  • 협의를 실현하는 방법(첫 페이지의.m에서)
  • 트리거 프로토콜 방법(두 번째 페이지의.m 클릭 방법 중)
  • 좋은 웹페이지 즐겨찾기