一、事件还原

自定义了一个UIView的类JLXThirdLoginView,在这个view中添加了一个按钮和响应函数,然后将这个自定义的view添加到其他的view中,但是点击该按钮,并没有响应绑定的函数。

自定义JLXThirdLoginView的代码如下

-(void)addToView:(UIView*)view WithPadding:(UIEdgeInsets)padding
{
    //微信按钮
    UIButton *weixinLoginBtn = [[UIButton alloc] init];
    [weixinLoginBtn setBackgroundImage:[UIImage imageNamed:@"item0"] forState:UIControlStateNormal];
    [weixinLoginBtn addTarget:self action:@selector(weixinLogin) forControlEvents:UIControlEventTouchUpInside];
    [view addSubview:weixinLoginBtn];
    [weixinLoginBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(view).with.offset(padding.left);
        make.bottom.equalTo(view).with.offset(padding.bottom*kJLXHeightScale);
        make.width.height.equalTo(@(60*kJLXHeightScale));
    }];
}
-(void)weixinLogin{
    NSLog(@"weixinLogin2");
}

在另外的viewController中使用代码如下

- (void)viewDidLoad {
    JLXThirdLoginView *thirdLoginView = [[JLXThirdLoginView alloc] init];
    [thirdLoginView addToView:self.view WithPadding:UIEdgeInsetsMake(0, -100, -80*kJLXHeightScale, 100)];
}
-(void)weixinLogin{
    NSLog(@"weixinLogin1");
}

然后点击微信按钮,并没有响应该weixinLogin函数,反而响应的是在viewController中定义一个weixinLogin函数,输出的是weixinLogin1。

二、事件解决

把JLXThirdLoginView做成一个单例,然后使用该单例

+(JLXThirdLoginView*)sharedJLXThirdLoginView
{
    static JLXThirdLoginView * _aJLXThirdLoginView = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _aJLXThirdLoginView = [[JLXThirdLoginView alloc] init];
    });
    return _aJLXThirdLoginView;
}

在viewController中使用单例

JLXThirdLoginView *thirdLoginView = [JLXThirdLoginView sharedJLXThirdLoginView];
    
[thirdLoginView addToView:self.view WithPadding:UIEdgeInsetsMake(0, -100, -80*kJLXHeightScale, 100)];

三、原因分析

这个是刚碰到的,目测是因为在viewController中新创建的JLXThirdLoginView后,加到了另外一个view上面之后,在函数绑定中的self的对象变了,这个原因晚点我再百度下,如果您知道原因,请留言,谢谢


☟☟可点击下方广告支持一下☟☟

最后修改:2017 年 02 月 22 日
请我喝杯可乐,请随意打赏: ☞已打赏列表