第⼋八讲 :UINavigationController、界⾯面通信
来源:互联网 发布:硬盘数据恢复软件排名 编辑:程序博客网 时间:2024/06/05 22:43
1.属性传值:
一般用于上级页面传值到下级页面,属性声明在下级页面,用于接收上级传过来的值.
2.代理传值:
实质:通过协议方法中的<参数>实现值传递:如- (void)sendValue:(NSString *)text
口诀:①.哪个页面(类)需要值,这个页面(类)即代理,协议方法的实现和遵守协议以及设置代理就写在哪个页面(类)里.
②.声明代理属性,就写在传值的那个页面(类)里,这个页面(类)即委托人.
③.想什么时候将值传过去,那就是让[代理 执行协议方法:实参值];
//注意:如果想用好代理-协议:
①.要明确谁是委托人:registerVC
②.谁是代理:loginVC
③.委托人要让代理做什么事:RegisterViewControllerDelegate
其实:
registerVC只是负责将值传到上级页面(代理),代理接收到值,至于接收到的值,代理loginVC怎么处理,registerVC不管.
loginViewController.m
#import "LoginViewController.h"#import "RegisterViewController.h"@interface LoginViewController ()@property (nonatomic,retain)UILabel * label;@property (nonatomic,retain)UITextField * textField;@end@implementation LoginViewController- (void)dealloc{ [_label release]; [_textField release]; [super dealloc];}- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor cyanColor];#pragma mark----创建UILabel,UITextField ,UIBarButtonItem; //用来显示下级传过来的字符串(值) self.label = [[UILabel alloc] initWithFrame:CGRectMake(100, 300, 150, 30)]; _label.backgroundColor = [UIColor whiteColor]; [self.view addSubview:_label]; [_label release]; //用来将用户输入的值传至下一级页面 self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 400, 150, 30)]; _textField.borderStyle = UITextBorderStyleRoundedRect; [self.view addSubview:_textField]; [_textField release]; //点击BarButtonItem推出下一级页面 UIBarButtonItem * BI = [[UIBarButtonItem alloc] initWithTitle:@"PUSH" style:UIBarButtonItemStylePlain target:self action:@selector(clickBI:)]; self.navigationItem.rightBarButtonItem = BI; [BI release]; }//当点击BarButtonItem时,会触发这个方法,推出下一级页面。- (void)clickBI:(UIBarButtonItem *)BI{ RegisterViewController * registerVC = [[RegisterViewController alloc] init]; //第五步 、设置代理 registerVC.delegate = self; //属性传值 registerVC.text = _textField.text; [self.navigationController pushViewController:registerVC animated:YES]; [registerVC release]; }//第三步、实现协议中的方法- (void)sendValue:(NSString *)text{ _label.text = text; }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller.}*/@endappdelegate.m
#import "AppDelegate.h"#import "RegisterViewController.h"#import "LoginViewController.h"@interface AppDelegate ()@end@implementation AppDelegate-(void)dealloc{ [_window release]; [super dealloc]; }- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; _window.backgroundColor = [UIColor whiteColor]; LoginViewController * loginVC = [[LoginViewController alloc] init]; RegisterViewController * registerVC = [[RegisterViewController alloc] init]; UINavigationController * NC = [[UINavigationController alloc] initWithRootViewController:loginVC]; _window.rootViewController = NC; [loginVC release]; [NC release]; [_window makeKeyAndVisible]; [_window release]; return YES;}
#import <UIKit/UIKit.h>#import "RegisterVCDelegate.h"@interface LoginViewController : UIViewController<RegisterVCDelegate>//第二步遵守协议@end
#import <UIKit/UIKit.h>#import "RegisterVCDelegate.h"@interface RegisterViewController : UIViewController//接收上级页面传过来的值。@property (nonatomic,retain)NSString * text;//声明一个代理属性@property (nonatomic,assign)id<RegisterVCDelegate>delegate;@end
#import "RegisterViewController.h"@interface RegisterViewController ()@property (nonatomic,retain)UILabel * label;@property (nonatomic,retain)UITextField * textField;@end@implementation RegisterViewController- (void)dealloc{ [_label release]; [_textField release]; [super dealloc];}- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor yellowColor]; self.label = [[UILabel alloc] initWithFrame:CGRectMake(100, 300, 150, 30)]; _label.backgroundColor = [UIColor whiteColor]; [self.view addSubview:_label]; [_label release]; //用来将用户输入的值传至下一级页面 self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 400, 150, 30)]; _textField.borderStyle = UITextBorderStyleRoundedRect; [self.view addSubview:_textField]; [_textField release]; //点击BarButtonItem推出下一级页面 UIBarButtonItem * BI = [[UIBarButtonItem alloc] initWithTitle:@"POP" style:UIBarButtonItemStylePlain target:self action:@selector(clickBI:)]; self.navigationItem.leftBarButtonItem = BI; [BI release]; #pragma mak------将上级页面传进来的值显示在label上 _label.text = _text; }- (void)clickBI:(UIBarButtonItem *)BI;{ [self.navigationController popToRootViewControllerAnimated:YES]; //检查sendValue方法有没有实现,如果没有实现,就不执行这个方法,如果实现就执行。 if ([_delegate respondsToSelector:@selector(sendValue:)]) { [_delegate sendValue:_textField.text]; } }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; }
0 0
- 第⼋八讲 :UINavigationController、界⾯面通信
- 第八讲 :UINavigationController、界⾯面通信
- UI第八天:UINavigationController、界⾯通信
- 第18讲 本地通信
- 第02讲-通信编码
- 第40讲--项目八--谁是小偷
- UINavigationController 、界面通信
- UI 第八天 UINavigationController
- 第015讲 仿sohu首页面布局
- 韩顺平 java 第28讲 面试题
- 韩顺平 Java 第52讲 面试题
- UIday0802:UINavigationController 传值(界面通信)
- UI基础-UINavigationController、界面通信
- iOS编程-------UINavigationController / 界面间通信(传值)
- 随意细解:UI -- UINavigationController、界面通信
- 面试题精讲
- UINavigationController 直接返回到第一级目录
- UINavigationController 直接返回到第一级目录
- UML——包图
- linux进程环境及进程属性
- 黑马程序员-OC-继承
- 简单原理介绍java反射(2)
- PAT的C++编译器
- 第⼋八讲 :UINavigationController、界⾯面通信
- Accessibilityservice(辅助服务开发)学习笔记
- 疯狂Android讲义第二讲
- There is a war (hdu 2435 最小割+枚举)
- ioc笔记
- 2015 Multi-University Training Contest 4
- 华为OJ(查找兄弟单词)
- html表单标记简单使用
- c++ string 路径处理