UIButton设置图像和标题

8 浏览
0 Comments

UIButton设置图像和标题

我使用以下代码加载一个图片,在按钮的上半部分是图片,下半部分是标题,但是只有图片显示出来,是什么原因呢?如果有好的建议,请告诉我们,谢谢。

UIButton *myButton = [[UIButton alloc]initWithFrame:CGRectMake(160, 400, 73, 44)];
[myButton setImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal];
[myButton setImageEdgeInsets: UIEdgeInsetsMake(0,0,22,0)];
[myButton setTitle:@"test" forState:UIControlStateNormal];
[myButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[myButton setTitleEdgeInsets: UIEdgeInsetsMake(22,10,0,10)];
[self.view addSubview:myButton];

0
0 Comments

问题的原因是想要在UIButton上同时设置图片和标题,但是作者给出的两种解决方法都存在一些问题。

第一种解决方法中,作者创建了一个UIButton实例,并设置了其frame属性。然后,作者创建了一个UIImageView实例,并给其image属性赋值为一个UIImage实例。接下来,作者设置了UIImageView实例的frame属性为UIButton实例的frame属性,但是减去了18个像素的高度。最后,作者设置了UIButton实例的title和titleColor属性,并给其添加了一个点击事件。最后,将UIImageView实例和UIButton实例添加到了视图中。

第二种解决方法中,作者创建了一个UIButton实例,并设置了其frame属性。然后,作者使用setImage:forState:方法给UIButton实例设置了图片,并使用setImageEdgeInsets:方法设置了图片的偏移。接下来,作者设置了UIButton实例的title和titleColor属性,并给其设置了titleEdgeInsets属性。最后,将UIButton实例添加到了视图中。

然而,这两种解决方法都存在一些问题。在第一种解决方法中,UIImageView实例被添加到UIButton实例上方,这可能会导致点击事件无法触发。在第二种解决方法中,作者建议将图片的大小调整为23x23像素,这可能会导致图片失真或不符合设计需求。

解决这个问题的方法是使用UIButton的setImage:forState:方法和setTitle:forState:方法来同时设置图片和标题。然后,可以使用setImageEdgeInsets:方法和setTitleEdgeInsets:方法来设置图片和标题的偏移。这样可以避免上述问题,并实现预期的效果。

以下是修改后的代码示例:

UIButton *myButton = [[UIButton alloc]initWithFrame:CGRectMake(160, 400, 73, 55)];
UIImage *img = [UIImage imageNamed:@"icon.png"];
[myButton setImage:img forState:UIControlStateNormal];
[myButton setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[myButton setTitle:@"test" forState:UIControlStateNormal];
[myButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[myButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[myButton addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:myButton];

希望这篇文章可以帮助解决问题,祝编码愉快!

0