———————————————Person.h<设置代理类的声明文件>------------------------------
#import <UIKit/UIKit.h>
//第一:
//1、引用类名
@class Person;
//2、定义一份代理协议
@protocol personDelegate <NSObject>
//3、声明代理方法
@required//必须实现的方法
- (void)personeat;
@optional//可选实现的方法(常用)
- (void)personplay;
- (void)personHabit:(NSString *)habit;
@end
@interface Person : UIView
//第二:声明代理属性(注意用weak)
@property (weak,nonatomic) id<personDelegate>delegate;
- (instancetype)initWithFrame:(CGRect)frame Titlearry:(NSArray *)titlearry;
//1、引用类名
@class Person;
//2、定义一份代理协议
@protocol personDelegate <NSObject>
//3、声明代理方法
@required//必须实现的方法
- (void)personeat;
@optional//可选实现的方法(常用)
- (void)personplay;
- (void)personHabit:(NSString *)habit;
@end
@interface Person : UIView
//第二:声明代理属性(注意用weak)
@property (weak,nonatomic) id<personDelegate>delegate;
- (instancetype)initWithFrame:(CGRect)frame Titlearry:(NSArray *)titlearry;
@end
———————————————Person.m<设置代理类的实现文件>------------------------------
#import "Person.h"
@interface Person ()
@property (nonatomic,strong) UIButton *habitbutton;
@end
@implementation Person
-(instancetype)initWithFrame:(CGRect)frame Titlearry:(NSArray *)titlearry{
self = [super initWithFrame:frame];
if (self) {
CGFloat interval = 20;
CGFloat frameW = ((self.frame.size.width - (titlearry.count-1)*interval)/titlearry.count);
CGFloat frameH = self.frame.size.height;
for (int i = 0; i < titlearry.count; i++) {
self.habitbutton = [UIButton buttonWithType:UIButtonTypeCustom];
self.habitbutton.layer.borderColor = [UIColor blueColor].CGColor;
self.habitbutton.layer.borderWidth = 1.0;
self.habitbutton.frame = CGRectMake(i * (frameW + interval), 0,frameW, frameH);
self.habitbutton.tag = 100+i;
[self.habitbutton setTitle:titlearry[i] forState:UIControlStateNormal];
[self.habitbutton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[self addSubview:self.habitbutton];
[self.habitbutton addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside];
}
}
return self;
}
- (void)clickAction:(UIButton *)click{
switch (click.tag) {
case 100:
[self personeatTitle:click.currentTitle];
break;
case 101:
[self personplayTitle:click.currentTitle];
break;
case 102:
[self peasonhabitTitle:click.currentTitle];
break;
default:
break;
}
}
//第三:调用代理的代理方法通知代理
- (void)personeatTitle:(NSString *)title{
//调用代理的代理personeat通知代理
[self.delegate personeat];
//如果代理方法是@optional,那么需要判断方法是否有实现
if ([self.delegate respondsToSelector:@selector(personHabit:)]) {
[self.delegate personHabit:title];
}
}
- (void)personplayTitle:(NSString *)title{
//如果代理方法是@optional,那么需要判断方法是否有实现
if ([self.delegate respondsToSelector:@selector(personplay)]) {
[self.delegate personplay];
}
//如果代理方法是@optional,那么需要判断方法是否有实现
if ([self.delegate respondsToSelector:@selector(personHabit:)]) {
[self.delegate personHabit:title];
}
}
- (void)peasonhabitTitle:(NSString *)title{
//如果代理方法是@optional,那么需要判断方法是否有实现
if ([self.delegate respondsToSelector:@selector(personHabit:)]) {
[self.delegate personHabit:title];
}
}
@end
@interface Person ()
@property (nonatomic,strong) UIButton *habitbutton;
@end
@implementation Person
-(instancetype)initWithFrame:(CGRect)frame Titlearry:(NSArray *)titlearry{
self = [super initWithFrame:frame];
if (self) {
CGFloat interval = 20;
CGFloat frameW = ((self.frame.size.width - (titlearry.count-1)*interval)/titlearry.count);
CGFloat frameH = self.frame.size.height;
for (int i = 0; i < titlearry.count; i++) {
self.habitbutton = [UIButton buttonWithType:UIButtonTypeCustom];
self.habitbutton.layer.borderColor = [UIColor blueColor].CGColor;
self.habitbutton.layer.borderWidth = 1.0;
self.habitbutton.frame = CGRectMake(i * (frameW + interval), 0,frameW, frameH);
self.habitbutton.tag = 100+i;
[self.habitbutton setTitle:titlearry[i] forState:UIControlStateNormal];
[self.habitbutton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[self addSubview:self.habitbutton];
[self.habitbutton addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside];
}
}
return self;
}
- (void)clickAction:(UIButton *)click{
switch (click.tag) {
case 100:
[self personeatTitle:click.currentTitle];
break;
case 101:
[self personplayTitle:click.currentTitle];
break;
case 102:
[self peasonhabitTitle:click.currentTitle];
break;
default:
break;
}
}
//第三:调用代理的代理方法通知代理
- (void)personeatTitle:(NSString *)title{
//调用代理的代理personeat通知代理
[self.delegate personeat];
//如果代理方法是@optional,那么需要判断方法是否有实现
if ([self.delegate respondsToSelector:@selector(personHabit:)]) {
[self.delegate personHabit:title];
}
}
- (void)personplayTitle:(NSString *)title{
//如果代理方法是@optional,那么需要判断方法是否有实现
if ([self.delegate respondsToSelector:@selector(personplay)]) {
[self.delegate personplay];
}
//如果代理方法是@optional,那么需要判断方法是否有实现
if ([self.delegate respondsToSelector:@selector(personHabit:)]) {
[self.delegate personHabit:title];
}
}
- (void)peasonhabitTitle:(NSString *)title{
//如果代理方法是@optional,那么需要判断方法是否有实现
if ([self.delegate respondsToSelector:@selector(personHabit:)]) {
[self.delegate personHabit:title];
}
}
@end
———————————————ViewController.h<遵守代理类的声明文件>------------------------------
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@interface ViewController : UIViewController
@end
———————————————ViewController.m<遵守代理类的实现文件>------------------------------
#import "ViewController.h"
#import "Person.h"
//第四:遵守代理协议
@interface ViewController ()<personDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Person *person = [[Person alloc] initWithFrame:CGRectMake(20, 64, self.view.frame.size.width-40, 45) Titlearry:[NSArray arrayWithObjects:@"畜生",@"动物",@"人类" ,nil]];
//第五:设置代理对象
person.delegate = self;
[self.view addSubview:person];
// Do any additional setup after loading the view, typically from a nib.
}
//第六:实现代理方法
#pragma markpersonDelegate
-(void)personeat{
NSLog(@"只会吃....");
}
- (void)personplay{
NSLog(@"只会玩....");
}
- (void)personHabit:(NSString *)habit{
NSLog(@"这是:%@....",habit);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#import "Person.h"
//第四:遵守代理协议
@interface ViewController ()<personDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Person *person = [[Person alloc] initWithFrame:CGRectMake(20, 64, self.view.frame.size.width-40, 45) Titlearry:[NSArray arrayWithObjects:@"畜生",@"动物",@"人类" ,nil]];
//第五:设置代理对象
person.delegate = self;
[self.view addSubview:person];
// Do any additional setup after loading the view, typically from a nib.
}
//第六:实现代理方法
#pragma markpersonDelegate
-(void)personeat{
NSLog(@"只会吃....");
}
- (void)personplay{
NSLog(@"只会玩....");
}
- (void)personHabit:(NSString *)habit{
NSLog(@"这是:%@....",habit);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end