1 使用SharedApplication,定义一个变量来传递.
2 使用文件plist,或者NSUserdefault来传递
3 通过一个单例的class来传递
4 通过Delegate来传递。
5 属性传值
6 数组,字典,数据库等
我知道传值有很多多很多办法,譬如使用NSUserdefault,文件,单例,数据库,plist,通知,委托。。。但是呢?我都没有用过,没有自己写过那些传值的代码,怎么办,这么多种方法,选了一种方法去用,我的首要目的是从b类把a类的一个属性的值拿到,所以,我用了委托的方法。对于委托,我是听过,看过,用过(改过别人的),但是自己没有写过委托,但是理解委托代理模式。动手吧。
(1)写一个ByValueDelegate协议,写两个类ViewController(蓝绿色)
和TwoViewController(黄色)
(2)第一个类ViewController.h
#import <UIKit/UIKit.h> #import "ByValueDelegate.h" #import "TwoViewController.h" @interface ViewController : UIViewController <ByValueDelegate> @property (weak, nonatomic) IBOutlet UITextView *textView; - (IBAction)Go:(id)sender;
ViewController.m
//进入下一页 - (IBAction)Go:(id)sender { TwoViewController *twoVC = [[TwoViewController alloc] init];//这里因为是自己生成的xib文件,所以这样子写就可以拉,如果是自己手动建的xib,那你要制定是哪一个xib twoVC.valueDelegate = self; [self setModalTransitionStyle:UIModalTransitionStylePartialCurl];//设置跳转过渡的一个style [self presentViewController:twoVC animated:YES completion:nil];//进入下一个页面 } //实现委托协议 -(void)passValue:(NSString *)value { self.textView.text = value; NSLog(@"value:%@",value); }
(3)第二个类:TwoViewController.h
#import <UIKit/UIKit.h> #import "ByValueDelegate.h" @interface TwoViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextView *twoTextView; - (IBAction)black:(id)sender; @property (nonatomic,retain) NSObject <ByValueDelegate> *valueDelegate;//申明一个委托 @end
TwoViewController.m
//返回上一个view - (IBAction)black:(id)sender { [self.valueDelegate passValue:self.twoTextView.text];//把twoTextView.text给委托 ,进到ViewController.m的实现委托的方法里面-(void)passValue:(NSString *)value [self dismissViewControllerAnimated:YES completion:nil]; }
效果图:
还可以看看这一篇,写的太详细了,佩服:点击打开链接
-----------------------------
在b类拿到a类的urlstr(string类型的)
(1)写好一个协议@protocol ByValueUrl,通过协议方法传值
-(void)passValue:(NSString *)urlStr;
(2)在a类申明一个协议的代理,让b类的实例实现byValueUrlDelegate代理-
self.byValueUrlDelegate = oneVC;
@property (nonatomic,assign)id <ByValueUrl>
byValueUrlDelegate;
//声明一个传值(url)的代理
把a类的值通过协议方法给b类
OneViewController *oneVC = [[OneViewController alloc]initWithNibName:@"one_ipad" bundle:nil]; NavViewController *navigationController = [[NavViewController alloc] initWithRootViewController:oneVC]; self.byValueUrlDelegate = oneVC; [self.byValueUrlDelegate passValue:self.homeURL]; //delegate-把self.homeURL给委托 ,进到 OneViewController.m的实现委托的方法里面-(void)passValue:(NSString *)value
(3)b类遵守协议,并实现协议的委托方法,拿到a类的urlstr。
//实现委托协议 -(void)passValue:(NSString *)urlStr { self.urlStr = urlStr; NSLog(@"url:%@",self.urlStr); }
-------------------------------------------------------------------------------
@property (nonatomic,assign)id <ByValueUrl>
byValueUrlDelegate;
@property (nonatomic,assign)NSObject
<ByValueUrl> * byValueUrlDelegate;
这两个的区别????