1

2つのボタンでセグメント化されたコントロールのアナログを実装しようとしています。デフォルトの状態では、画像はなく、ラベルのみがあり、選択した状態では背景画像があります。TouchDownイベントでコントロールを有効にしたい。

ここにコードがあります(私はすべての不要なものを削除しました):

-(IBAction) onButton1
{
    button1.selected = YES;
    button2.selected = NO;
}

-(IBAction) onButton2
{
    button1.selected = NO;
    button2.selected = YES;
}

問題は次のとおりです。button1が選択されていると仮定します。button2をタッチすると、その画像は「選択された」画像に変更されません(前述のように、デフォルトの画像はありません)が、指を離すと変更されます。また、すでに選択されているボタンをタッチすると、「選択された」画像が削除され、離すと元に戻ります。

ボタンの強調表示された状態を設定したので、ボタンはその状態で画像を「選択」しましたが、それは役に立ちませんでした(IBだけでなく[button setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateHighlighted];)。私はadjustsImageWhenHighlighted=NOを設定しましたが、これもプログラムの方法とIBの両方で役に立ちませんでした。

私はここで多くの類似した(しかし同一ではない)質問を見てきましたが、それらは私にとってはうまくいきませんでした。

前もって感謝します

4

1 に答える 1

0

タッチダウンイベントでアクションをアクティブにしたかったので、強調表示する必要はないと思います。次のコードを試してください

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    button1 = [UIButton buttonWithType:UIButtonTypeCustom];
    button1.frame = CGRectMake(10.0f, 10.0f, 50.0f, 50.0f);
    [button1 setBackgroundImage:[UIImage imageNamed:@"btn.jpeg"] forState:UIControlStateNormal];
    [button1 setBackgroundImage:[UIImage imageNamed:@"btnsel.jpeg"] forState:UIControlStateSelected];
    [button1 addTarget:self action:@selector(button1Action:) forControlEvents:UIControlEventTouchDown];
    [button1 addTarget:self action:@selector(button1TouchUp:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];

    [self.view addSubview:button1];
    button1.selected = YES;

    button2 = [UIButton buttonWithType:UIButtonTypeCustom];
    button2.frame = CGRectMake(80.0f, 10.0f, 50.0f, 50.0f);
    [button2 setBackgroundImage:[UIImage imageNamed:@"btn.jpeg"] forState:UIControlStateNormal];

    [button2 setBackgroundImage:[UIImage imageNamed:@"btnsel.jpeg"] forState:UIControlStateSelected];
    [button2 addTarget:self action:@selector(button2Action:) forControlEvents:UIControlEventTouchDown];
    [button2 addTarget:self action:@selector(button2TouchUp:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];

    [self.view addSubview:button2];
}

- (void)button1Action:(UIButton*)sender
{
    button1.highlighted = NO;
    button1.selected = YES;
    button2.selected = NO;
}

- (void)button2Action:(UIButton*)sender
{
    button2.highlighted = NO;
    button2.selected = YES;
    button1.selected = NO;    
}

- (void)button1TouchUp:(id)sender
{
    button1.highlighted = NO;
}

- (void)button2TouchUp:(id)sender
{
    button2.highlighted = NO;
}
于 2013-01-21T15:35:56.590 に答える