[ios] UIButton 이미지 + 텍스트 IOS

내가 필요 UIButton이미지 및 텍스트 . 이미지는 상단에 있어야하고 텍스트는 이미지 아래에 있어야합니다. 둘 다 클릭 할 수 있어야합니다.



답변

모두 코드를 사용하는 매우 복잡한 답변을 봅니다. 그러나 Interface Builder를 사용하는 경우 이를 수행하는 매우 쉬운 방법이 있습니다.

  1. 버튼을 선택하고 제목과 이미지를 설정합니다. 이미지 대신 배경을 설정하면 버튼보다 작 으면 이미지 크기가 조정됩니다.IB 기본 이미지 및 제목
  2. 가장자리와 삽입을 변경하여 두 항목의 위치를 ​​설정합니다. 제어 섹션에서 둘 다의 정렬을 제어 할 수도 있습니다.

IB 위치 설정
IB 제어 세트

다른 솔루션이 제안한 것처럼 내부에 UILabels 및 UIImage를 만들지 않고도 코드별로 동일한 접근 방식을 사용할 수도 있습니다. 항상 단순하게 유지하십시오!

편집 : 올바른 삽입으로 3 가지 항목 (제목, 이미지 및 배경)이 설정된 작은 예를 첨부했습니다.
버튼 미리보기


답변

문제에 대한이 솔루션찾고 있다고 생각 합니다 .

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

… 버튼의 나머지 사용자 정의는 이제 귀하의 의무이며보기에 버튼을 추가하는 것을 잊지 마십시오.

업데이트 # 1업데이트 # 2

또는 동적 버튼필요하지 않은 경우 인터페이스 빌더 의 뷰에 버튼을 추가 할 수 있으며 여기에서도 동일한 값을 설정할 수 있습니다. 꽤 똑같지 만 여기에이 버전도 하나의 간단한 그림으로 나와 있습니다.

당신은 또한 최종 결과를 볼 수 있습니다 에서 인터페이스 빌더를 이 스크린 샷에있다.

여기에 이미지 설명 입력


답변

Xcode-9Xcode-10 Apple은 이제 Edge Inset과 관련하여 거의 변경하지 않았으므로 크기 검사기에서 변경할 수 있습니다.

아래 단계를 따르십시오.

1 단계 :
텍스트를 입력하고 표시 할 이미지를 선택합니다.

여기에 이미지 설명 입력

2 단계 :
아래 이미지와 같이 요구 사항에 따라 버튼 컨트롤을 선택합니다.

여기에 이미지 설명 입력

3 단계 :
이제 크기 검사기로 이동하여 요구 사항에 따라 가치를 추가합니다.

여기에 이미지 설명 입력


답변

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 속성이 있으므로 동일한 컨트롤에서 레이블과 버튼을 사용할 필요가 없습니다.


답변

이 코드를 사용하십시오.

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]


답변

같은 문제가 발생하여 다음과 같이 새 하위 클래스를 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;

}

Angel García Olloqui의 대답은 인터페이스 빌더를 사용하여 수동으로 배치하면 또 다른 좋은 솔루션이라고 생각하지만 각 버튼에 대한 콘텐츠 삽입을 수정할 필요가 없기 때문에 솔루션을 유지하겠습니다.