繁体   English   中英

将UIImageView添加到自定义UIButton类

[英]Add UIImageView to custom UIButton class

我创建了一个自定义UIButton类,并覆盖了init方法:

- (id)initWithFrame:(CGRect)frame title:(NSString *)titulo
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

        setaDown = [UIImage imageNamed:@"setaDown"];
        separator = [UIImage imageNamed:@"separatorLine"];

        self = [UIButton buttonWithType:UIButtonTypeCustom];
        [self setFrame:frame];
        self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
        self.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
        seta = [[UIImageView alloc]initWithFrame:CGRectMake(frame.size.width-setaDown.size.width*2, frame.size.height/2, setaDown.size.width/1.2, setaDown.size.height/1.2)];
        [seta setImage:setaDown];
        [self addSubview:seta];
        separatorLine = [[UIImageView alloc]initWithFrame:CGRectMake(5, frame.size.height-2, frame.size.width-10, separator.size.height)];
        [separatorLine setImage:separator];
        [self addSubview:separatorLine];
        [self setTitle:titulo forState:UIControlStateNormal];
        [self setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
        [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [self setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
        self.backgroundColor = [UIColor whiteColor];
    }
    return self;
}

问题是,图像没有显示在按钮中,并且我在一行中有一个exc_bad_access

seta = [[UIImageView alloc]initWithFrame:CGRectMake(frame.size.width-setaDown.size.width*2, frame.size.height/2, setaDown.size.width/1.2, setaDown.size.height/1.2)];

不知道为什么我会收到此错误,以及如何解决它。

您可以创建一个自定义UIControl ,它具有touchUp event并在其上放置任何类型的组件。 如果UIButton不能满足您的需要,则可以制作一个自定义UIControl

例如:

class MyButton: UIControl {
   @IBOutlet var myImage: UIImageView!
   @IBOutlet var myTitle: UILabel!
   @IBOutlet var myImage2: UIImageView!


   override var isSelected: Bool {
        didSet {
             // Configure image for `isSelected` status been changed.
             myImage.image = (isSelected ? selImg  : normalImg)
        }
   }       

   override var isEnabled: Bool {
        didSet {
             // Configure for `isEnabled` status been changed.
             myTitle.isEnabled = isEnabled
        }
   }
}

一个UIButton已经有一个imageView 您可以简单地使用

self.imageView.image = setaDown

并根据需要配置imageView其他方面(例如,位置和大小,以便separator适合)。

据我所知,您不能在一个按钮上添加2张图像。 获取图像编辑器,将它们组合在一起,然后执行以下操作:

[self setBackgroundImage:[UIImage imageNamed:@"mynewimagename"] forState:UIControlStateNormal]

简单得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM