UIButton传递多个参数或者响应多个函数

一般UIButton点击之后相应一个对应的函数,而在传参的过程中,使用这个函数传的也是一个参数

-(void)dismissPopupViewWithTarget:(UIButton*)sender
{
//    function1
//    function2
}

但是这个sender除了传了一个sender.tag值,好像没有什么其他用处了,然后在该函数中响应function1function2这两个自己对象的函数。现在如果想在这个点击的时候除了响应自己的函数外,还想响应另外可变对象的函数应该怎么实现呢。
当然我说的不是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];
    ;
    ;
    [view addSubview:button];

    objc_setAssociatedObject(button, "firstObject", target, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    objc_setAssociatedObject(button, "secondObject", action, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    ;
    
    
    
    ;
}

在响应的函数中截取传输的内容,如果是获取传输的内容的话,则直接取值即可,现在是传递的函数,所以第一个是传递的对象,第二个是那个对象的函数,这样在点击的时候就可以达到除了响应自己的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的函数。传值也一样。

Last modification:April 8th, 2017 at 10:33 pm
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

Leave a Comment