现在的位置: 首页 > 综合 > 正文

iOS-两个类之间使用委托代理传值

2013年12月10日 ⁄ 综合 ⁄ 共 2579字 ⁄ 字号 评论关闭

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;

这两个的区别????


抱歉!评论已关闭.