2012-12-15 6 views
1

이미지를 올바르게 교체하는 둥근 사각형 버튼이 있습니다. 그 안에있는 텍스트도 변경하고 싶지만 그 텍스트는 나타나지 않습니다. StackOverflow에 대한 대부분의 질문은 하나만 다루지 만 다른 하나는 다루지 않는 것처럼 보입니다. 가장 관련있는 것으로 보이는 항목은 일종의 BarItem에 대한 것입니다.iOS 버튼의 이미지와 텍스트를 어떻게 변경합니까?

버튼 터치에 대한 IBAction 내에서 다음과 같습니다.

[sender setImage:[UIImage imageNamed:@"swappingCorrectly.png"] forState:UIControlStateNormal]; 
[sender setTitle:(@"Aww, this doesn't show up!") forState:UIControlStateNormal]; 

위에서 언급 한 것처럼 이미지는 잘 전환되지만 레이블은 표시되지 않습니다. 나는 이미지를 스와핑하지 않는 다른 버튼에서 동일한 텍스트 스와핑 선을 사용하며 정상적으로 작동합니다.

첫 번째 탭 이후에는 나타나지 않습니다. 누구나 내가 그 텍스트를 보여주기 위해 무엇을 할 수 있는지 알고 있습니까?

+0

attributedTitle도 설정하고 있습니까? – Endophage

+0

[[보낸 사람] setAttributedTitle : (@ "What!")]]; 'NSInvalidArgumentException'이 발생했습니다. 이유는 : '- [UIAccessibilityBundle setAttributedTitle :] : 인식 할 수없는 선택기를 인스턴스로 보냈습니다'라는 예외입니다. – Danny

+0

'[UIButton setAttributedTitle : forState :]', setTitle과 같은 서명입니다. attributedTitle이 제목보다 우선 적용되기 때문에 묻기 만하면됩니다. – Endophage

답변

1

나를 위해 작동합니다.

enter image description here

enter image description here

- (IBAction)buttonPressed:(id)sender { 
    [sender setImage:[UIImage imageNamed:@"button.jpeg"] forState:UIControlStateNormal]; 
    [sender setTitle:(@"Aww") forState:UIControlStateNormal]; 
} 
나는 상사 반대로 레이블이 오른쪽에 있음을 통지했다. 라벨이 잘못된 위치에 렌더링 될 수 있습니까? setTitle을 주석 처리하면 버튼 제목이 이미지에 의해 오프셋되어 동일한 결과가 생성됩니다.

UIImageView를 단추로 바꾸는 방법. 참고 : 이것은 매우 더럽고 클래스로 래핑되어야합니다. 나는 남겨 뒀지 만 탭에서 뭔가를하도록 코드를 주석 처리했습니다. 보이지 않는 것은 xib 파일에 던져지고 userenabled = true로 설정된 UIImageView입니다.

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(buttonPressed:)]; 
    [[self fakeButton] addGestureRecognizer:tap]; 

    UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 250, 25)]; 
    label.text = @"unpressed"; 
    label.backgroundColor = [UIColor clearColor]; 
    [[self fakeButton] addSubview:label]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)buttonPressed:(id)sender { 
// UIGestureRecognizer *gesture = (UIGestureRecognizer*)sender; 
// UIImageView* temp = (UIImageView*)gesture.view; 
// for (UILabel *label in temp.subviews) { 
//  label.text = @"pressed"; 
// } 
// temp.image = [UIImage imageNamed:@"button.jpeg"]; 
//  
// //if you want it to reset after a Delay 
// [self performSelector:@selector(buttonUnpressed:) withObject:temp afterDelay:.2]; 

} 

-(void)buttonUnpressed:(UIImageView*)view 
{ 

// for (UILabel *label in view.subviews) { 
//  label.text = @"unpressed"; 
// } 
// view.image = [UIImage imageNamed:@"origButton.jpeg"]; 
// [self performSelector:@selector(buttonUnpressed:) withObject:view afterDelay:.2]; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 

    CGPoint point = [touch locationInView:self.view]; 

    if (CGRectContainsPoint([[self fakeButton] frame], point)) 
    { 
      //Do touch down state 
     NSLog(@"touchStarted"); 
     [[self fakeButton] setImage:[UIImage imageNamed:@"button.jpeg"]]; 
     for (UILabel *label in [[self fakeButton] subviews]) { 
      label.text = @"pressed"; 
     } 
    } 

} 
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"touch ended"); 
    //remove touch down state 
    [[self fakeButton] setImage:[UIImage imageNamed:@"origButton.jpeg"]]; 
    for (UILabel *label in [[self fakeButton] subviews]) { 
     label.text = @"unpressed"; 
    } 

} 

@end 
+0

흥미 롭습니다. 내 버튼은 전체 영역을 차지하므로 화면에서 벗어나는 오프셋이 있으면 그 부재는 의미가 있습니다. 실험 해 보겠습니다. 또한 교환 전후에 이미지가 있다고 가정하십시오. – Danny

+0

내가 시도 할 몇 가지 사항은 가장자리 오프셋을 설정하는 것입니다. [보낸 사람 setTitleEdgeInsets : UIEdgeInsetsMake (-10.0, 10.0, 0.0, 0.0)]; 또는 새 레이블을 추가하고 터치를 전달합니다. 저는 개인적으로 그것들을 커스터마이징하는 것을 싫어합니다. 보통 UIImageView를 사용하고 제스처와 상태를 추가하여 조금 더 제어합니다. – Kibitz503

+0

실제로 UIImageView를 다른 이미지가있는 교체되지 않는 버튼과 함께 사용하고있었습니다. 버튼을 눌렀을 때 숨겨 지더라도 더 이상 누르지 않습니다. 마치 버튼이 숨겨진 후에 이미지가 우선 적용된 것처럼 보입니다. UIImageView를 사용하는 방법에 대한 블로그 게시물이있는 경우 지금 필자의 누락 된 텍스트에 대해 최선을 다하고 있지만 링크 해주십시오! – Danny

관련 문제