您的位置:首页 > 移动开发 > IOS开发

IOS代理浅析

2013-12-15 11:33 169 查看
一直想总结一下关于代理的用法,恰好今天有时间。

现在有这样一个需求:比如A是图书阅读界面,界面上有个按钮是【添加书签】,这个按钮有一个响应事件-(void)addBookMarkAtIndexPath,把当前页作为书签给存入数据库;B界面是书签展示界面,用来显示这本书中添加的书签。当在A中点击【添加书签】后,B中要把当前页的缩略图给显示出来。其实这些功能不用代理也能实现,用代理是为了是类之间的联系更加的松散,以后代码的维护比较省心

建立一个协议

@protocol BookMarkDelegate <NSObject>

- (void) addABookMarkThoughIndexPage: (NSInteger)page;

@end;

A类如下

.h

@Class BookMarkDelegate;

@interface A : UIViewController

@protocol (nonatomic,weak)  id<BookMarkDelegate> delegate;

@end;

.m

@implementation A 

UIButton * addMarkButton = [ UIButton buttonWithType: UIButtonTypeCustom];

[addMarkButton addTarget:self action:@select(addBookMarkAtIndexPath) forControlEvents: UIControllerEventsTouchUpInside];

……

-(void)addBookMarkAtIndexPath{

[self.delegate addABookMarkThoughIndexPage:self.currentPage];

}

@end

B类

.h

@interface B :NSObject <BookMarkDelegate>

.m

@interface B ()

- (void) addMarkAtPage: (NSInteger) index;

@end

@implementation B

//在B中要实例化A,将A中的delegate指向自己

A* a = [[A alloc]init];

a.delegate = self;

- (void) addMarkAtPage: (NSInteger) index{

UIView* markView = [self getThumbViewAtIndexPage:index] //取得指定页的缩略图

markView.frame = CGRectMake(x,y,width,height);

[self.view addSubView: markView];

}

#pragma mark - BookMarkDelegate 

- (void) addABookMarkThoughIndexPage: (NSInteger)page{

[self  addMarkAtPage: page];

}

@end

其实,我对代理的理解也不是很深刻,也就局限于此类功能的实现,入过你有更深刻的认识,还请留言,共同学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: