ios中的delegate的理解运用

本文通过实例解析iOS开发中Delegate的使用方法,从基本概念到具体实践,包括父视图控制器与子视图控制器之间的数据传递。通过定义协议、实现协议方法,以及在不同场景下的应用,读者可以逐步掌握Delegate的运用技巧。
摘要由CSDN通过智能技术生成

delegete---委托,在ios中View之间,已经ViewController之间数据传递等,都要用到这个概念。

现在虽然已经能运用了,可是最初刚开始接触这个概念的时候,很是头疼。

多亏一篇介绍得非常易懂的文章,才算渐渐开始理解,希望能给正在学习delegate的朋友一点帮助。

翻译的通俗化,也加了些自己的理解,有不准确的地方,还忘谅解。

例子:父画面的背景颜色,根据子画面的颜色选择来进行更改。

父画面ModalViewController                                子画面ColorSetViewController

在ios中如孩子对父亲不能直接说的话,通过书信方式来传递。这个书信就是delegate.

子画面(孩子这边)

1:孩子首先确定要用书信 ,那么先在自己的头文件中宣布 (@protocol ColorSelectDelegate;)

2:孩子开始准备自己的书信名称。(id<ColorSelectDelegate> delegate;)

3:孩子准备自己的书信内容,根据需要有什么要传递的。(@protocol ColorSelectDelegate<NSobject>-(void)selectColor:(UIColor*)inColor; //这个delegate method,要选择颜色@end)

4:前面都是准备工作在.h中定义, 孩子在适当的时候,把书信发出去在.m中执行([self.delegate selectColor:requestColor];)

父画面(父亲这边)

1:父亲这边要等着孩子的书信。(@interface ModalViewController : UIViewController <ColorSelectDelegate>)

2:父亲和孩子联系,也需要给个适当的时机。让孩子把信交给父亲。这个就是在父画面调用子画面的时候。 子画面的ColorSetViewController.delegate = self;//这个self其实就是父亲

3:父亲接到孩子的书信后,知道该做什么来对应。(-(void)selectColor:(UIColor*)inColor; )//看到孩子书信后做些什么。

下面贴部分代码

@protocol ColorSelectDelegate;
@interface ColorSetViewController : UIViewController {
    id<ColorSelectDelegate>    delegate;
    IBOutlet UIButton *redButton;
    IBOutlet UIButton *greenButton;
    IBOutlet UIButton *whiteButton;
    IBOutlet UIButton *cancelButton;
}
@property (nonatomic, assign) id<ColorSelectDelegate>    delegate;
@property (nonatomic, retain) IBOutlet UIButton *redButton;
@property (nonatomic, retain) IBOutlet UIButton *greenButton;
@property (nonatomic, retain) IBOutlet UIButton *whiteButton;
@property (nonatomic, retain) IBOutlet UIButton *cancelButton;
//*********************************************************
// COLOR BUTTON
- (IBAction)colorSelectButtonAction:(UIButton *)sender;
@end
//
#pragma mark Protocol ColorSelectDelegate
//
@protocol ColorSelectDelegate
  
  
   
   
    -(void)selectColor:(UIColor*)inColor; 
@end

  
  

.m

#import "ColorSetViewController.h"
#import "ModalViewController.h"
@implementation ColorSetViewController
@synthesize delegate;
@synthesize redButton;
@synthesize greenButton;
@synthesize whiteButton;
@synthesize cancelButton;
- (void)viewDidUnload {
    [super viewDidUnload];
    self.redButton = nil;
    self.greenButton = nil;
    self.whiteButton = nil;
    self.cancelButton = nil;
    self.delegate = nil;
}

// COLOR BUTTON
- (IBAction)colorSelectButtonAction:(UIButton *)sender {
    UIColor* requestColor = nil;
    // 选择颜色
    switch (sender.tag) {
        case kRED:
            requestColor = [UIColor redColor]; 
            break;        
        case kGREEN:
            requestColor = [UIColor greenColor]; 
            break;
        case kWHITE:
            requestColor = [UIColor whiteColor]; 
            break;
        case kCANCEL:
            requestColor = nil; 
            break;
        default:
            break;
    }
    // 把信发出去
    [self.delegate selectColor:requestColor];
}
@end

父画面

@interface ModalViewController : UIViewController <ColorSelectDelegate>{ 
    IBOutlet UIBarButtonItem *colorButton;
}
@property (nonatomic, retain) IBOutlet UIBarButtonItem *colorButton;
//*********************************************************
// [COLOR] 与孩子通话的时机
- (IBAction)ButtonAction:(UIBarButtonItem *)sender;
@end
#import "ModalViewController.h"
#import "ColorSetViewController.h"
@implementation ModalViewController
@synthesize colorButton;

- (void)viewDidLoad {
    [super viewDidLoad];
}
- (void)viewDidUnload {
    self.colorButton = nil;
}

//*********************************************************
// COLOR BUTTON
- (IBAction)ButtonAction:(UIBarButtonItem *)sender {
    //孩子通话
   ColorSetViewController *colorSetView = [[ColorSetViewController alloc]
                     initWithNibName:@"ColorSetViewController" bundle:nil];
    colorSetView.colorSelectdelegate_ = self;
   [self presentModalViewController:colorSetView animated:YES];
}
// 收到孩子的信,做些什么。
-(void)selectColor:(UIColor*)inColor {
   // nil 什么都没有说。
    if (inColor != nil)
        self.view.backgroundColor = inColor;  // 改变背景颜色
    [self dismissModalViewControllerAnimated:YES];    
}
@end

根据这个流程练习一下,能渐渐明白delegate的运用了。

之后再看些专业的解释,能更深入的掌握。

 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值