1

画像を正しく交換するRoundRectボタンがあります。それらの中のテキストも変更したいのですが、そのテキストが表示されません。StackOverflowに関するほとんどの質問は、一方を扱っているように見えますが、もう一方は扱っていないようです。最も関連していると思われる質問は、ある種のBarItemに関するものになります。

ボタンをタッチするためのIBAction内から、次のようになります。

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

前述のように、画像は問題なく切り替えられますが、そのラベルは表示されません。画像を交換しない別のボタンで同じテキスト交換行を使用しましたが、正常に機能します。

最初のタップ後には表示されません。そのテキストを表示させるために私ができることを誰かが知っていますか?

4

1 に答える 1

1

これは私のために働きます。

- (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
于 2012-12-15T00:22:25.250 に答える