当我在技术讨论组里面发出这个问题时,有同学就直接质疑:label里面怎么可以加button呢???
一开始我还笑话这位同学呢,UIButton和UILabel都是继承于UIView的,怎么不可以添加!!!
但是,你在storyboard活着xib里面往label拖button怎么拖也拖不进去,系统始终会将button直接放在label的父视图上,所以我也怀疑了。
再但是,你用纯代码写上面的操作是,然后用View Hierarchy查看层级关系,button确实是作为了label的子视图。
但此事,怎么点击button都没响应,群里某大神就说了,人机交互没打开。
我说,默认是打开的啊,而且往刻意打开了,也不行啊。
又某位大神说:button是继承自响应者,所以才能点击,label继承自view,label默认是不响应点击时间的。
真是一语惊醒梦中人,响应链的关系,打开button父视图的人机交互不就可以了吗
上代码吧:
UILabel *label = [[UILabel alloc] initWithFrame:(CGRect){100, 100, 100, 100}];
// [label setBackgroundColor:[UIColor cyanColor]]; //设置button的父视图时,父视图的颜色会把全部的子视图覆盖,使子视图看不见(但有时候又行,我也不知道是什么缘故)
[label.layer setBorderWidth:1.0f];
[label setUserInteractionEnabled:YES]; //button的父视图开启交互开能让button有交互能力
[self.view addSubview:label];
UIButton *button = [[UIButton alloc] initWithFrame:(CGRect){15, 15, 70, 70}];
[button setContentEdgeInsets:(UIEdgeInsets){5, 5, 5, 5}];
[button setImage:[UIImage imageNamed:@"dog"] forState:UIControlStateNormal];
[button setBackgroundColor:[UIColor redColor]];
[button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
[label addSubview:button];