一、事件还原
自定义了一个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的对象变了,这个原因晚点我再百度下,如果您知道原因,请留言,谢谢
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/498.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!