delegate传值-demo


        之前一直困惑delegate的设计模式,自己闲的时候写了个demo,加了点注释,希望初学者可以看看,不妥之处请大家指出。

      这里只粘贴出关键代码:

       

      一、 自定义协议:

//  xyzDelegate.h


#import <Foundation/Foundation.h>

@protocol xyzDelegate <NSObject>

-(void)showName:(NSString *)name;

@end

//


二、通用写法都写为delegate并给它加nonatomic,assign防止魔鬼引用


B.h

#import <UIKit/UIKit.h>

#import "xyzDelegate.h"

@interface ViewControllerB :UIViewController

{

    id<xyzDelegate>delegate;

}


@property(nonatomic,assign)id<xyzDelegate>delegate;


@end




三、delegate 调用协议方法
//
B.m

//transvalue是一个按钮的方法

-(void)transvalue{

    //上个页面跳过来的时候设置了指针委托,那么这里就会识别到delegate响应了这个方法;

    if ([delegate respondsToSelector:@selector(showName:)])

    {

        

        UITextField *mytext = (UITextField *)[self.viewviewWithTag:1001];

        

        

        //step01

        [delegateshowName:mytext.text];

        

        

        [self.navigationControllerpopToRootViewControllerAnimated:YES];

    }

}


四、遵循这个协议,具体让其干什么(传值等)


遵循的这个协议的.m


//调到下个页面,此时设置下个页的delegate方法给ViewController本身,这个协议及自定义的协议,协议的是由B来配置的,那么B里面可以检测到其是否将自己的delegate委托给某人,这里是委托给ViewController,让它来完成本来应该让B自己来做的事情,现在由A代劳;

-(void)jp2next

    {

        ViewControllerB *bvc = [[ViewControllerBalloc] init];

       //设置委托

        bvc.delegate =self;

        [self.navigationControllerpushViewController:bvc animated:YES];

        

        [bvc release];

        

    }



//delegate's method



//step02

//这样viewControllerviewcontrollerB就产生了通信

//这里的name及由viewControllerb中传过来的


-(void)showName:(NSString *)name

    {

        NSLog(@"bdelegate指定给a,a来实现");

        lbe.text = [NSStringstringWithFormat:@"%@",name];

        NSLog(@"%@",name);

        

    }


http://pan.baidu.com/share/link?shareid=172482&uk=2315407450&third=0


     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章