一般UIButton点击之后相应一个对应的函数,而在传参的过程中,使用这个函数传的也是一个参数
-(void)dismissPopupViewWithTarget:(UIButton*)sender
{
// function1
// function2
}
但是这个sender除了传了一个sender.tag
值,好像没有什么其他用处了,然后在该函数中响应function1
和function2
这两个自己对象的函数。现在如果想在这个点击的时候除了响应自己的函数外,还想响应另外可变对象的函数应该怎么实现呢。
当然我说的不是new出一个新对象,然后再调用这种基础使用,我说的是比如一个提醒框,同一个提醒框在不同界面弹出的时候响应的是不同的对象的函数。
解决方案
使用runtime的方案解决
#import "objc/runtime.h"
///错误提醒框
-(void)showErrorPopupView:(NSString*)subText withTarget:(id)target action:(NSString*)action
{
UIButton *button = [[UIButton alloc] init];
UIImage *img = [UIImage imageNamed:@"btn_big"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(0, 25, 0, 25) resizingMode:UIImageResizingModeStretch];
[button setBackgroundImage:img forState:UIControlStateNormal];
[button setTitle:@"重试" forState:UIControlStateNormal];
[view addSubview:button];
objc_setAssociatedObject(button, "firstObject", target, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
objc_setAssociatedObject(button, "secondObject", action, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[button addTarget:self action:@selector(dismissPopupViewWithTarget:) forControlEvents:UIControlEventTouchUpInside];
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(titleLabel.mas_bottom).with.offset(52*kJLXHeightScale);
make.centerX.equalTo(view);
make.width.mas_equalTo(360*kJLXWidthScale);
}];
}
在响应的函数中截取传输的内容,如果是获取传输的内容的话,则直接取值即可,现在是传递的函数,所以第一个是传递的对象,第二个是那个对象的函数,这样在点击的时候就可以达到除了响应自己的dismissPopupView的函数,还可以响应传进来的对象响应对应的函数。
-(void)dismissPopupViewWithTarget:(UIButton*)sender
{
id first = objc_getAssociatedObject(sender, "firstObject");
id second = objc_getAssociatedObject(sender, "secondObject");
SEL sel = NSSelectorFromString (second);
if ([first respondsToSelector: sel])
{
[first performSelector: sel withObject:nil];
}
[self dismissPopupView];
}
使用
在其他的对象里面调用
[[JLXPopupView sharedJLXPopupView] showErrorPopupView:[NSString stringWithFormat:@"提交出现错误,请重新提交%@",[responseObject objectForKey:@"msg"]] withTarget:weakSelf action:@"backToVC"];
这样在点击的时候,就会响应自己的backToVC的函数,也会响应JLXPopupView的dismissPopupView的函数。传值也一样。
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/525.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!