UIButton有图像和文字吗?

时间:2010-12-03 10:57:30

标签: ios iphone xcode uibutton

我有一个尺寸宽度为200,高度为270的按钮。我想在同一个按钮上放置文字和图像。不作为该文本的背景图像。而不是这个,我想在同一个按钮上显示高度为120的文本和高度为150的图像。怎么做?

10 个答案:

答案 0 :(得分:114)

您可以使用此代码,它将满足您的目的

.h file code
IBOutlet UIButton *testBtn;

.m file code
[testBtn setImage: [UIImage imageNamed:@"Image name.png"] forState:UIControlStateNormal];
[testBtn setTitleEdgeInsets:UIEdgeInsetsMake(70.0, -150.0, 5.0, 5.0)];
[testBtn setTitle:@"Your text" forState:UIControlStateNormal];

根据您的要求调整按钮的坐标和大小。这是一个指导您的示例代码。

PS:在nib文件中取一个UIButton>将它设为自定义按钮>将IBOutlet连接到nib文件中的自定义按钮。显示它。

答案 1 :(得分:14)

以下代码显示使用UIButton类的setImageEdgeInsets和setTitleEdgeInsets属性将图像和文本放在按钮中。

UIButton *butt=[UIButton buttonWithType:UIButtonTypeCustom ];
    [butt setFrame:CGRectMake(0, 0, 100, 100)];
    [butt setBackgroundImage:[UIImage imageNamed:@"sig.png"] forState:UIControlStateNormal];
    [butt setImageEdgeInsets:UIEdgeInsetsMake(0.0, 0.0, 50.0, 0.0)];
    [butt setTitleEdgeInsets:UIEdgeInsetsMake(75.0, 0.0, 0.0, 0.0)];
    [butt setTitle:@"hello" forState:UIControlStateNormal];
    [butt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [self.view addSubview:butt];

答案 2 :(得分:6)

使用子视图的概念。取3个控件,UIButton(200x270),UILabel(200x120)和UIImageView(200x150)。将图像分配到UIImageView并设置UILabel的文本。根据{{​​1}}的(x,y)位置定位标签和图像视图控件。

最后,你应该有:

对于以下情况:

UIButton

答案 3 :(得分:5)

[testBtn setBackgroudImage: [UIImage imageNamed:@"Image name.png"] forState:UIControlStateNormal];
[testBtn setTitle:@"Your text" forState:UIControlStateNormal];

答案 4 :(得分:5)

是的,您可以在同一个按钮中显示图像和标题,只要它们足够小以适合。当你需要处理安置时,困难的部分就来了。

您可以使用contentVerticalAlignment的{​​{1}}和contentHorizontalAlignment属性(继承自UIButton)。

您还可以使用UIControltitleEdgeInsets属性根据对齐属性从标记和图像中移位标题和图像。

如果您想要非常准确或自定义展示位置,建议您覆盖imageEdgeInsets的{​​{1}}和titleRectForContentRect:方法。这些允许您为标题和图像定义帧,只要按钮需要布局,就会调用它们。如果您想在imageRectForContentRect:内引用UIButton,请发出一条警告,确保首先定义self.titleLabel。我遇到了错误的访问错误,可能在首次初始化titleLabel时调用该方法。

答案 5 :(得分:3)

在Swift 3中

let button = UIButton()

//make sure the image (jpg, png) you are placing in the button
//is about the right size or it will push the label off the button

//add image
let image = UIImage(named:"my_button_image")
button.setImage(image, for: .normal)
button.imageView?.contentMode = .scaleAspectFit
button.imageEdgeInsets = UIEdgeInsets(top:0, left:-30, bottom:0, right:0) //adjust these to have fit right

//add title
button.setTitle("Fan", for: .normal)
button.titleEdgeInsets = UIEdgeInsets(top:0, left:10, bottom:0, right:0) //adjust insets to have fit how you want

//add button to your view - like in viewDidLoad or your own custom view setup
addSubview(button)

如果使用故事板,如果以编程方式执行此操作以使其显示/将其附加到Interface Builder中的按钮引用,请不要忘记设置锚点

答案 6 :(得分:1)

如果您想要更多地控制布局,请创建UIControl的子类,并在xib文件中排列所需的视图(UILabelUIImageView)。然后,您可以定期使用Autolayout,而无需理清UIEdgeInsets

答案 7 :(得分:0)

使用按钮子视图在Swift 4中为我工作。

  • 创建按钮
  • 设置按钮的图像
  • 为文字
  • 创建标签
  • 将标签添加为按钮的子视图
  • 在按钮

    中约束标签
           let imageAndTextButton : UIButton = {
                let button = UIButton(frame: .zero)
                button.tintColor = .clear
                button.setImage(#imageLiteral(resourceName: "buttonImage"), for: .normal)
                button.imageView?.contentMode = .scaleToFill
                button.translatesAutoresizingMaskIntoConstraints = false
                return button
            }()
            let textForButtonLabel = UILabel(frame: .zero)
            textForButtonLabel.translatesAutoresizingMaskIntoConstraints = false
            textForButtonLabel.attributedText = NSAttributedString(string: "Text For Button", attributes: buttonTextAttributes)
            textForButtonLabel.textAlignment = .center
            textForButtonLabel.backgroundColor = .clear
            imageAndTextButton.addSubview(textForButtonLabel)
            imageAndTextButton.addConstraint(NSLayoutConstraint(item: textForButtonLabel, attribute: .centerX, relatedBy: .equal, toItem: imageAndTextButton, attribute: .centerX, multiplier: 1.0, constant: 0))
            imageAndTextButton.addConstraint(NSLayoutConstraint(item: textForButtonLabel, attribute: .centerY, relatedBy: .equal, toItem: imageAndTextButton, attribute: .centerY, multiplier: 1.0, constant: 0))
    

答案 8 :(得分:0)

尝试一下对我有用,

我们必须根据按钮的大小和要求设置 UIEdgeInsets 的值。

[self.testButton setTitle: @"myTitle" forState: UIControlStateNormal];
UIImage *iconImage = [UIImage imageWithIcon:@"fa-dot-circle-o" backgroundColor:[UIColor clearColor] iconColor:[UIColor whiteColor] fontSize:10.0f];

//UIEdgeInsets insets = {top, left, bottom, right};

[self.testButton setImageEdgeInsets:UIEdgeInsetsMake(3.0, 0.0, 3.0, 2.0)];
[self.testButton setTitleEdgeInsets:UIEdgeInsetsMake(3.0, 1.0, 3.0, 0.0)];
[self.testButton setImage:iconImage forState:UIControlStateNormal];
[self.testButton addTarget:self action:@selector(testButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.testButton];

希望这对某些人有帮助。

答案 9 :(得分:0)

快速版本:

NA

enter image description here