关于 ios 页面信息传递方式 delegate 和 NSNotificationCenter

来源:互联网 发布:休闲网游推荐 知乎 编辑:程序博客网 时间:2024/06/16 04:45
在ios 开发过程中经常的需要用到页面传值,主要有两种方式:Delegate(委托)以及NSNotification(通知)。两种方式各有特点:(1)delegate,委托传递的消息会关注接收者的态度。(2)NSNotification,只管将消息传递过去,而不理会接收者的态度。新建一个.h头文件,定义一个协议;@protocol PassValueDelegate <NSObject>-(void) passValue:(id) value;@end
A.h先加入上面的协议头文件,然后定义:@property (assign,nonatomic) id<PassValueDelegate> _delegate;
A.m@synthesize array,_delegate;- (IBAction)goNext:(id)sender {            SecondPage * newPage = [[SecondPage alloc]init];        self._delegate = newPage;    [self._delegate passValue:@"123"];        //页面跳转    [self presentModalViewController:newPage animated:YES];            [newPage release];}
在 SecondPage.h
#import <UIKit/UIKit.h>#import "PassValueDelegate.h"@interface SecondPage : UIViewController<PassValueDelegate>@property (retain,nonatomic) NSString * aString;
SecondPage.m 实现协议方法
-(void) passValue:(id)value { aString = value; NSLog(@"aString = %@",aString);}
如此,aString 就获得了前一个页面传来的值123。注意:当
self._delegate = newPage;  [self._delegate passValue:@"123"];

位于:[self presentModalViewController:newPage animated:YES]; 
之前 ,SecondPage * newPage = [[SecondPage alloc]init]之后或者时,传过去的值将会先于viewDidLoad 函数加载运行,这时便可以在viewDidLoad里将传过来的值进行操作或者传递给控件。如果是 [self presentModalViewController:newPage animated:YES]; 之后,那么传递的值则会后于viewDidLoad函数加载,那么当在viewDidLoad里面输出传递的值时,会显示null。nsnotification方式也是如此。传递过来的值最后定义一个成员变量进行接收,然后便可以随意传给其他的方法了。
在SecondPage * newPage = [[SecondPage alloc]init] 之前时,将不会有值传过去,时错误的位置。
未完,待续...