UIButton图像+文本IOS

我需要一个带图像和文本的UIButton。 图片应该位于最上方,图片下方的文字应该可点击。

我看到非常复杂的答案,他们都使用代码。 但是, 如果您正在使用Interface Builder ,则可以使用以下方法:

  1. selectbutton并设置标题和图像。 请注意,如果您设置的是背景而不是图像,则图像的大小将小于button的大小。 IB基本图像和标题
  2. 通过更改边和插图来设置两个项目的位置。 你甚至可以在控制部分控制两者的alignment。

IB位置设置IB控制集

你甚至可以用代码使用相同的方法,而不需要在其他解决scheme中创buildUILabels和UIImage。 始终保持简单!

编辑:附加一个小例子有3件事情设置(标题,图像和背景)与正确的插页 按钮预览

我认为你正在为你的问题寻找这个解决scheme

 UIButton *_button = [UIButton buttonWithType:UIButtonTypeCustom]; [_button setFrame:CGRectMake(0.f, 0.f, 128.f, 128.f)]; // SET the values for your wishes [_button setCenter:CGPointMake(128.f, 128.f)]; // SET the values for your wishes [_button setClipsToBounds:false]; [_button setBackgroundImage:[UIImage imageNamed:@"jquery-mobile-icon.png"] forState:UIControlStateNormal]; // SET the image name for your wishes [_button setTitle:@"Button" forState:UIControlStateNormal]; [_button.titleLabel setFont:[UIFont systemFontOfSize:24.f]]; [_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; // SET the colour for your wishes [_button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; // SET the colour for your wishes [_button setTitleEdgeInsets:UIEdgeInsetsMake(0.f, 0.f, -110.f, 0.f)]; // SET the values for your wishes [_button addTarget:self action:@selector(buttonTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside]; // you can ADD the action to the button as well like 

…button的其余定制现在是你的职责,不要忘记添加button到你的视图。

更新#1更新#2

或者, 如果您不需要dynamicbutton ,则可以在“ 界面构build器”中将button添加到视图中,并且您也可以在那里设置相同的值。 它是相同的,但这是这个版本,以及在一个简单的图片。

也可以在屏幕截图中看到 Interface Builder中 的最终结果

在这里输入图像描述

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.imageView.image = [UIImage imageNamed:@"your image name here"]; button.titleLabel.text = @"your text here"; 

但下面的代码将在上面显示标签,并在后台显示图像

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.background.image = [UIImage imageNamed:@"your image name here"]; button.titleLabel.text = @"your text here"; 

因为UIButton具有UILabel和UIimageview属性,所以不需要在同一个控件中使用标签和button。

使用此代码:

 UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect]; button.imageView.frame=CGRectMake(0.0f, 0.0f, 50.0f, 44.0f);///You can replace it with your own dimensions. UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 35.0f, 50.0f, 44.0f)];///You can replace it with your own dimensions. [button addSubview:label]; 

使用此代码:

 UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom]; [sampleButton setFrame:CGRectMake(0, 10, 200, 52)]; [sampleButton setTitle:@"Button Title" forState:UIControlStateNormal]; [sampleButton setFont:[UIFont boldSystemFontOfSize:20]]; [sampleButton setBackgroundImage:[[UIImage imageNamed:@"redButton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal]; [sampleButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:sampleButton] 

我遇到了同样的问题,我通过创build一个新的UIButton子类并覆盖layoutSubviews:方法来修复它,如下所示:

 -(void)layoutSubviews { [super layoutSubviews]; // Center image CGPoint center = self.imageView.center; center.x = self.frame.size.width/2; center.y = self.imageView.frame.size.height/2; self.imageView.center = center; //Center text CGRect newFrame = [self titleLabel].frame; newFrame.origin.x = 0; newFrame.origin.y = self.imageView.frame.size.height + 5; newFrame.size.width = self.frame.size.width; self.titleLabel.frame = newFrame; self.titleLabel.textAlignment = UITextAlignmentCenter; } 

我认为天使加西亚Olloqui的答案是另一个很好的解决scheme,如果你把他们所有的手动界面生成器,但我会保持我的解决scheme,因为我不必修改我的每个button的内容插入。

使UIImageViewUILabel ,并将图像和文字设置为这两个….然后放置一个自定义button,通过imageView和标签….

 UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"search.png"]]; imageView.frame = CGRectMake(x, y, imageView.frame.size.width, imageView.frame.size.height); [self.view addSubview:imageView]; UILabel *yourLabel = [[UILabel alloc] initWithFrame:CGRectMake(x, y,a,b)]; yourLabel.text = @"raj"; [self.view addSubview:yourLabel]; UIButton * yourBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [yourBtn setFrame:CGRectMake(x, y,c,d)]; [yourBtn addTarget:self action:@selector(@"Your Action") forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:yourBtn]; 

您应该为图片和自定义标签创build自定义图片视图,并添加到您的button作为子视图。 而已。

 UIButton *yourButton = [UIButton buttonWithType:UIButtonTypeCustom]; yourButton.backgroundColor = [UIColor greenColor]; yourButton.frame = CGRectMake(140, 40, 175, 30); [yourButton addTarget:self action:@selector(yourButtonSelected:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:yourButton]; UIImageView *imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, yourButton.frame.size.width, yourButton.frame.size.height/2)]; imageView1.image =[UIImage imageNamed:@"images.jpg"]; [yourButton addSubview:imageView1]; UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(0, yourButton.frame.size.height/2, yourButton.frame.size.width, yourButton.frame.size.height/2)]; label.backgroundColor = [UIColor greenColor]; label.textAlignment= UITextAlignmentCenter; label.text = @"ButtonTitle"; [yourButton addSubview:label]; 

为了testing目的,使用yourButtonSelected:方法

 -(void)yourButtonSelected:(id)sender{ NSLog(@"Your Button Selected"); } 

我认为这对你有帮助。

这很简单,只需将图像添加到你的背景button,并给uicontrolstatenormalbutton的标题标签文本。 而已。

 [btn setBackgroundImage:[UIImage imageNamed:@"img.png"] forState:UIControlStateNormal]; [btn setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom]; [btn setTitle:@"Click Me" forState:UIControlStateNormal]; 

检查这个真棒lib ImageCenterButton它解决了所有其他库所面临的问题,我确认它适用于iOS 9

在这里输入图像描述

Xcode-8Xcode-9 Apple现在对Edge Inset做了一些改动,你可以在大小检查器下改变它。

请按照以下步骤操作:

步骤1:input文字并select您想要显示的图像:

在这里输入图像描述

第二步:按照您的要求selectbutton控件,如下图所示:

在这里输入图像描述

第3步:现在去检查大小,并根据您的要求增加价值:

在这里输入图像描述