如下图所示:自定义PersonalCenterView,如何在controller拿到按钮(小箭头)的点击方法?
复制代码
UI布局代码如下所示
- (void)initUI
{
//子视图
[self addSubview:self.headImageView];
[self addSubview:self.nameLabel];
[self addSubview:self.autographLabel];
[self addSubview:self.pushButton];
}
- (void)layoutSubviews
{
[super layoutSubviews];
[self.headImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(20);
make.top.mas_equalTo(20);
make.width.mas_equalTo(60);
make.height.mas_equalTo(60);
}];
[self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.headImageView.mas_right).mas_offset(15);
make.top.mas_equalTo(25);
make.height.mas_equalTo(20);
}];
[self.autographLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.headImageView.mas_right).mas_offset(15);
make.top.mas_equalTo(self.nameLabel.mas_bottom).mas_offset(10);
make.height.mas_equalTo(20);
}];
[self.pushButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.mas_centerY);
make.right.mas_equalTo(-20);
make.width.mas_equalTo(10);
make.height.mas_equalTo(17);
}];
}
- (UIImageView*)headImageView
{
if (!_headImageView) {
_headImageView = [[UIImageView alloc]init];
_headImageView.backgroundColor = [UIColor redColor];
_headImageView.layer.masksToBounds = YES;
_headImageView.layer.cornerRadius = 30;
_headImageView.image = [UIImage imageNamed:@"head.jpg"];
}
return _headImageView;
}
- (UILabel*)nameLabel
{
if (!_nameLabel) {
_nameLabel = [[UILabel alloc]init];
_nameLabel.font = [UIFont systemFontOfSize:15];
_nameLabel.text = @"陈小丸:dango:";
}
return _nameLabel;
}
- (UILabel*)autographLabel
{
if (!_autographLabel) {
_autographLabel = [[UILabel alloc]init];
_autographLabel.font = [UIFont systemFontOfSize:13];
_autographLabel.numberOfLines = 0;
_autographLabel.text = @"愿你不知人间疾苦,过得无拘无束";
}
return _autographLabel;
}
- (UIButton*)pushButton
{
if (!_pushButton) {
_pushButton = [UIButton buttonWithType:(UIButtonTypeCustom)];
[_pushButton setBackgroundImage:[UIImage imageNamed:@"force_icon"] forState:UIControlStateNormal];
}
return _pushButton;
}
复制代码
实现方式
1.SEL
1).h文件
//指定初始化方法 - (instancetype)initWithFrame:(CGRect)frame target:(id)target sel:(SEL)action; 复制代码
2).m文件
- (instancetype)initWithFrame:(CGRect)frame target:(id)target sel:(SEL)sel
{
self = [super initWithFrame:frame];
if (self) {
//背景颜色
self.backgroundColor = [UIColor groupTableViewBackgroundColor];
//子视图
[self initUI];
[self.pushButton addTarget:target action:sel forControlEvents:(UIControlEventTouchUpInside)];
}
return self;
}
复制代码
3)controller文件
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
PersonalCenterView *centerView = [[PersonalCenterView alloc]initWithFrame:CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.width, 100) target:self sel:@selector(clickEnter)];
[self.view addSubview:centerView];
}
- (void)clickEnter
{
//处理点击事件
NSLog(@"箭头被点击了~");
}
复制代码
2.代理
1).h文件
#import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @protocol PersonalCenterViewDelegate <NSObject> - (void)clickEnter; @end @interface PersonalCenterView : UIView //代理实现 @property (nonatomic, weak) id<PersonalCenterViewDelegate>delegate; @end NS_ASSUME_NONNULL_END 复制代码
2).m文件
//pushButton点击事件
- (void)clickAction:(UIButton*)button
{
if ([self.delegate respondsToSelector:@selector(clickEnter)]) {
[self.delegate clickEnter];
}
}
复制代码
3)controller文件
@interface ViewController ()<PersonalCenterViewDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//代理实现通信
PersonalCenterView *centerView = [[PersonalCenterView alloc]initWithFrame:CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.width, 100)];
centerView.delegate = self;
[self.view addSubview:centerView];
}
- (void)clickEnter
{
//处理点击事件
NSLog(@"箭头被点击了~");
}
复制代码
3.block
1).h文件
//指定初始化方法 - (instancetype)initWithFrame:(CGRect)frame clickBlock:(void(^)(void))clickBlock; 复制代码
2).m文件
- (instancetype)initWithFrame:(CGRect)frame clickBlock:(void(^)(void))clickBlock
{
self = [super initWithFrame:frame];
if (self) {
//背景颜色
self.backgroundColor = [UIColor groupTableViewBackgroundColor];
//子视图
[self initUI];
self.clickBlock = clickBlock;
}
return self;
}
- (void)clickAction:(UIButton*)button
{
if(self.clickBlock)
{
self.clickBlock();
}
}
复制代码
3)controller文件
PersonalCenterView *centerView = [[PersonalCenterView alloc]initWithFrame:CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.width, 100) clickBlock:^{
//处理点击事件
NSLog(@"箭头被点击了~");
}];
复制代码
4.kvo
1).m文件
- (UIButton*)pushButton
{
if (!_pushButton) {
_pushButton = [UIButton buttonWithType:(UIButtonTypeCustom)];
[_pushButton setBackgroundImage:[UIImage imageNamed:@"force_icon"] forState:UIControlStateNormal];
[_pushButton addTarget:self action:@selector(clickAction:) forControlEvents:(UIControlEventTouchUpInside)];
}
return _pushButton;
}
- (void)clickAction:(UIButton*)button
{
//触发kvo
button.selected = !button.selected;
}
复制代码
2)controller文件
//采用facebook开源的第三方
PersonalCenterView *centerView = [[PersonalCenterView alloc]initWithFrame:CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.width, 100)];
FBKVOController *KVOController = [FBKVOController controllerWithObserver:self];
[KVOController observe:centerView.pushButton keyPath:@"selected" options:(NSKeyValueObservingOptionNew) block:^(id _Nullable observer, id _Nonnull object, NSDictionary<NSString *,id> * _Nonnull change) {
NSLog(@"%@",change);
//处理点击事件 无需判断 因为按钮被点击就会走
NSLog(@"箭头被点击了~");
}];
复制代码
5.ReactiveCocoa
1).h文件
@property (nonatomic,strong) RACSubject* clickSubject; 复制代码
2).m文件
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.clickSubject = [RACSubject subject];
//背景颜色
self.backgroundColor = [UIColor groupTableViewBackgroundColor];
//子视图
[self initUI];
}
return self;
}
- (UIButton*)pushButton
{
if (!_pushButton) {
_pushButton = [UIButton buttonWithType:(UIButtonTypeCustom)];
[_pushButton setBackgroundImage:[UIImage imageNamed:@"force_icon"] forState:UIControlStateNormal];
[[_pushButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UIButton * button) {
[self.clickSubject sendNext:button];
}];
}
return _pushButton;
}
复制代码
3)controller文件
PersonalCenterView *centerView = [[PersonalCenterView alloc]initWithFrame:CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.width, 100)];
[centerView.clickSubject subscribeNext:^(UIButton *button) {
//处理点击事件
NSLog(@"箭头被点击了~");
}];
复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 拿到一个 Demo 该怎么下手?
- 拿到一个 Demo 该怎么下手?
- 如何备战蓝桥杯拿到省一
- 利用XSS漏洞轻松拿到登录用户的cookie
- Sqlmap初体验,渗透拿到网站用户名密码
- 春招:我居然三天就拿到了offer?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。