1

コードは次のとおりです。

UISegmentedControl * segmentedCtrl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 180, 35)];
    //[segmentedCtrl setTintColor:[UIColor brownColor]];
    [segmentedCtrl setBackgroundImage:[UIImage imageNamed:@"btn-gradient-brown"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [segmentedCtrl setBackgroundImage:[UIImage imageNamed:@"btn-gradient-brown"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [segmentedCtrl setBackgroundColor:[UIColor clearColor]];

    [segmentedCtrl insertSegmentWithImage:[UIImage imageNamed:nil] atIndex:0 animated:NO];
    [segmentedCtrl insertSegmentWithImage:[UIImage imageNamed:nil] atIndex:1 animated:NO];
    [segmentedCtrl insertSegmentWithImage:[UIImage imageNamed:nil] atIndex:2 animated:NO];

    [segmentedCtrl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
    [segmentedCtrl setSegmentedControlStyle:UISegmentedControlStyleBar];
    //[segmentedCtrl setMomentary:YES];
    [segmentedCtrl.layer setBorderWidth:1.0];
    [segmentedCtrl.layer setCornerRadius:5.0];

ただし、セグメント化されたコントロールを押すと、次のようになります。

ここに画像の説明を入力

青いハイライトを削除するアイデアはありますか?

この問題を示す zip したサンプル プロジェクトを次に示します。

http://dl.dropbox.com/u/19680269/Test.zip

4

4 に答える 4

1

私はあなたのコードを試しました...

このコードを追加して問題を解決しました

ここに画像の説明を入力

[segmentedCtrl setSegmentedControlStyle:UISegmentedControlStyleBezeled];

したがって、コード全体は次のようになります

UISegmentedControl * segmentedCtrl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 180, 35)];
//[segmentedCtrl setTintColor:[UIColor brownColor]];
[segmentedCtrl setBackgroundImage:[UIImage imageNamed:@"btn-gradient-brown"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[segmentedCtrl setBackgroundImage:[UIImage imageNamed:@"btn-gradient-brown"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[segmentedCtrl setBackgroundColor:[UIColor clearColor]];
[segmentedCtrl setSegmentedControlStyle:UISegmentedControlStyleBezeled];
[segmentedCtrl insertSegmentWithImage:[UIImage imageNamed:nil] atIndex:0 animated:NO];
[segmentedCtrl insertSegmentWithImage:[UIImage imageNamed:nil] atIndex:1 animated:NO];
[segmentedCtrl insertSegmentWithImage:[UIImage imageNamed:nil] atIndex:2 animated:NO];

[segmentedCtrl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
//[segmentedCtrl setMomentary:YES];
[segmentedCtrl.layer setBorderWidth:1.0];
[segmentedCtrl.layer setCornerRadius:5.0];
于 2012-05-25T08:04:28.790 に答える
0

セパレータpngファイルを追加できます。

[segmentedControl setDividerImage:[UIImage imageNamed:@"separator.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

ps:

なぜそれをビューに2回追加したのですか?

[self.view addSubview:segmentedControl];

編集:

セグメント間の区切り文字が本当に必要ない場合は、次の方法で区切り文字を削除できます。

for (UIView* aSubV in segmentedControl.subviews) {
    NSLog(@"•••");
    NSLog(@"aSubV2: %@",[aSubV.subviews objectAtIndex:1]);
    UIView* separatorToRemove = [aSubV.subviews objectAtIndex:1];
    [separatorToRemove removeFromSuperview];
}
于 2012-05-25T08:28:21.043 に答える
0
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;

viewDidLoadこの行をof に追加するとMCSegmentedControlDemoViewController.m、バグが修正されました。青色は、通常のセグメント ビューのハイライト カラーです。

通常のセグメントに背景を設定すると、全体が覆われます。エッジの青が見えます。

バースタイルにすると、画像がセグメント全体をカバーします。したがって、青色は表示されません。

于 2012-05-25T08:59:36.123 に答える
0

これがまさにあなたが探しているものかどうかはわかりませんが、以下のコードを使用すると、結果は次のようになります。

ここに画像の説明を入力

コードの変更:

  • あなたは2回に追加segmentedControlしていますself.view- 最初の出現を削除しました
  • 追加した[segmentedControl setSegmentedControlStyle:UISegmentedControlStyleBar];

セグメント間に 1px の緑色の線があります - これはあなたの線によるものです:

segmentedControl.tintColor = [UIColor colorWithRed:.0 green:.6 blue:.0 alpha:1.0];

線を他の色にしたい場合は、tintColorプロパティを変更してください。

完全viewDidLoadなものは次のようになります。

コードはどこにも変更されていません。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor colorWithWhite:0.95 alpha:1.0];
    NSArray *items = [NSArray arrayWithObjects:
                      @"one",
                      @"two",
                      [UIImage imageNamed:@"star.png"],
                      nil];

    UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:items];

    // set frame, add to view, set target and action for value change as usual
    segmentedControl.frame = CGRectMake(10.0f, 208.0f, 300.0f, 44.0f);
    //[self.view addSubview:segmentedControl];
    [segmentedControl addTarget:self action:@selector(segmentedControlDidChange:) forControlEvents:UIControlEventValueChanged];

    [segmentedControl setSegmentedControlStyle:UISegmentedControlStyleBar];

    [segmentedControl setBackgroundImage:[UIImage imageNamed:@"btn-gradient-brown"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    segmentedControl.selectedSegmentIndex = 1;

    // Set a tint color
    segmentedControl.tintColor = [UIColor colorWithRed:.0 green:.6 blue:.0 alpha:1.0];

    [self.view addSubview:segmentedControl];
    [segmentedControl release];    
}
于 2012-05-25T14:30:20.950 に答える