0

セグメント化されたコントロールを模倣するために、2 つのボタンが隣り合って作成されています。UIKit の許容範囲を超えて外観をカスタマイズするためにこれを行っています。選択したプロパティを使用してボタンを押し続けることにしました。通常の状態と選択された状態のそれぞれに 1 つずつ、2 つの画像があります。

問題は、ボタンを選択すると、ハイライト状態のため、ボタンがハイライトされて暗くなることです。選択した画像をハイライト状態にも使用することにしましたが、アイデアや提案が点滅します。

- (void)leftSegmentPressed:(id)sender
{
    if ([sender isSelected]) {
        [sender setSelected:NO];
    }
    else {
        [sender setSelected:YES];
    }
}
4

4 に答える 4

1

指定した画像があなたにあるかどうかを確認するか、指定したBundle画像名が含まれているかどうかを確認しますlower case。次に、次のように記述します

[button1 setImage:[UIImage imageNamed:@"normal1.png"] forState:UIControlStateNormal];
[button1 setImage:[UIImage imageNamed:@"selected1.png"] forState:UIControlStateSelected];
[button2 setImage:[UIImage imageNamed:@"normal2.png"] forState:UIControlStateNormal];
[button2 setImage:[UIImage imageNamed:@"selected2.png"] forState:UIControlStateSelected];

button1.tag = 1;
button2.tag = 2;

[button1 addTarget:self action:@selector(buttonSelected:) forControlEvents:UIControlEventTouchUpInside]
[button2 addTarget:self action:@selector(buttonSelected:) forControlEvents:UIControlEventTouchUpInside]

あなたのボタンイベントメソッドで

-(void)buttonSelected:(id)sender {
    if([sender tag] == 1) {
        button1.selected = YES;
        button2.selected = NO;
    } else {
         button1.selected = NO;
         button2.selected = YES;
    }
}
于 2012-12-07T04:11:46.807 に答える
1

「選択済み」ボタンについては、それを無効にして、状態の画像を手動で切り替えます。

- (void) viewDidLoad
{
    [rightSegmentButton setImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
    [rightSegmentButton setImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateDisabled];
    [leftSegmentButton setImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
    [leftSegmentButton setImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateDisabled];
}

- (void)leftSegmentPressed:(id)sender
{
    sender.enabled = NO;
    rightSegmentButton.enabled = YES;
}

- (void)rightSegmentPressed:(id)sender
{
    sender.enabled = NO;
    leftSegmentButton.enabled = YES;
}
于 2012-12-07T02:09:34.690 に答える
0
UIButton *yourButton1 = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
yourButton1.frame = CGRectMake(110.0, 360.0, 100.0, 30.0);
[yourButton1 setTitle:@"Left" forState:UIControlStateNormal];
yourButton.backgroundColor = [UIColor clearColor];
yourButton1.tag = 1;
[yourButton1 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal ];    

UIImage *buttonImageNormal = [UIImage imageNamed:@"yourNormalImage.png"];// set normal image 
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[yourButton1 setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal];

UIImage *buttonImagePressed = [UIImage imageNamed:@"yourSelectedImage.png"];// set selected image
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[yourButton1 setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted];

[yourButton1 addTarget:self action:@selector(leftSegmentPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:yourButton1];

別の 2 番目のボタンについても同じことを行います。

アクションメソッドでは、次のコードを設定します..

- (void)leftSegmentPressed:(id)sender
{
    UIButton *btnTemp = (UIBUtton *)sender;
    if (btnTemp.tag == 1) {
        [yourButton1 setSelected:YES];
        [yourButton2 setSelected:NO];
    }
    else {
        [yourButton1 setSelected:NO];
        [yourButton2 setSelected:YES];
    }
}
于 2012-12-07T05:06:45.690 に答える
0

[ボタン setAdjustsImageWhenHighlighted:NO];

これにより、ちらつきが防止されます。

于 2012-12-07T02:14:18.737 に答える