码迷,mamicode.com
首页 > 移动开发 > 详细

iOS语言中的代理模式

时间:2015-06-30 12:24:49      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

什么是代理,为什么需要代理?

当某一个类或者试图控制器需要完成某些“动作”,但是却需要另一个类或者视图控制器作为其动作的载体。

 

 

实际应用中的单例

比如当左侧滑栏leftViewController上有用户登录后显示的头像,点击头像会进入用户设置页面。而用户设置页面实际是需要从rootViewController push进入的。所以当用户点击左侧滑栏leftViewController上的用户头像时,需要左侧滑栏的代理rootViewController去执行创建用户设置页面并弹入的这一系列操作。这就是一个代理的实现。

技术分享

 

技术分享

    在这个过程中,头像按钮是属于左侧滑栏leftViewController的点击事件,然而点击后的正真执行却是需要rootViewController来完成。那么leftViewController的作用就是在用户点击头像按钮的时候告诉系统,请让我的代理去执行点击按钮后的操作吧。

 

 

用代码来实现一个代理

首先第一步需要在leftViewController.h里做如下声明,@required表示其代理必须执行其下各个方法,@optional表示其代理可选择性的执行其下的方法 

@protocol LeftMenuViewControllerDelegate <NSObject>

@required
- (void)userImageTap:(UIImageView *)sender;

@optional
- (void)loginButtonClicked:(UIButton *)sender;
.
.
.

@end

@interface LeftMenuViewController : UIViewController

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

@end

 

然后需要在leftViewController.m中实现代理方法

- (void)userImageTap:(id)sender{
    if ([_delegate respondsToSelector:@selector(userImageTap:)]) {
        [_delegate userImageTap:sender];
    }
}

 

最后需要在rootViewController中声明leftViewController.delegate = self 即rootViewController可以执行其具体的代理方法操作,最后执行需要执行的代理方法即可

_leftMenuVC.delegate = self;

- (void)userImageTap:(UIImageView *)sender{
    [self pageReclaim];
    AccountSettingViewController *accountVC = [[AccountSettingViewController alloc]initWithNibName:@"AccountSettingViewController" bundle:nil];
    [self.navigationController pushViewController:accountVC animated:YES];
    [accountVC release];
    [self leftNavigationButtonClicked];
}

 

iOS语言中的代理模式

标签:

原文地址:http://www.cnblogs.com/rogertan30/p/4609847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!