38

カスタムはどうすればいいUISegmentedControlですか?

2 つの画像があります。1 つはセグメントがアクティブなときに表示され、もう 1 つはセグメントが非アクティブな場合に表示されます。スタイルなどをオーバーライドしてUISegmentedControl、自分の画像をアクティブ/非アクティブな背景として使用できますか?

4

10 に答える 10

33

「オン」と「オフ」の位置に2つの異なる状態があることに加えて、この追加のコードを追加する必要がありました。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set set segControl background to transparent
    CGRect rect = CGRectMake(0, 0, 1, 1);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
    CGContextFillRect(context, rect);
    UIImage *transparentImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [self.segControl setBackgroundImage:transparentImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

    [self.segControl setDividerImage:transparentImage forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
}

編集:これはいくつかの宣伝を得ているため、よりクリーンな解決策は、透明な画像を作成する代わりに [UIImage new] を使用することです。

 [self.segControl setDividerImage:[UIImage new] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
 [self.segControl setBackgroundImage:[UIImage new] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
于 2012-07-05T23:21:08.383 に答える
15

iOS 開発者ライブラリで説明されているメソッドを使用できます。

http://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/UISegmentedControl_Class/Reference/UISegmentedControl.html

「外観のカスタマイズ」セクションまでスクロールします。複数のボタン状態の背景画像、ボタン分割画像などを設定する方法があります。

これらのメソッドは、iOS5 以降でのみ使用できます。

@property tintColor  
– backgroundImageForState:barMetrics:
– setBackgroundImage:forState:barMetrics:
– contentPositionAdjustmentForSegmentType:barMetrics:
– setContentPositionAdjustment:forSegmentType:barMetrics:
– dividerImageForLeftSegmentState:rightSegmentState:barMetrics:
– setDividerImage:forLeftSegmentState:rightSegmentState:barMetrics:
– titleTextAttributesForState:
– setTitleTextAttributes:forState:
于 2012-04-09T20:50:03.680 に答える
9

最も簡単な方法は、を模倣する独自のコントロールを作成することUISegmentedControlです。UISegmentedControl一連のボタンを配置し、それらの画像の状態を管理するだけです。特別なことは何もしません。

于 2010-09-21T03:15:18.050 に答える
6

@rpetrichが配列に配置せずに説明していたように機能するものを書きましたが、私の意見ではこれが最も簡単な解決策です。誰かがこれが役に立つことを願っています

.h

IBOutlet UIButton *index0;
IBOutlet UIButton *index1;
IBOutlet UIButton *index2;
IBOutlet UIImageView *segMentControl;

-(IBAction)segmentSwitch:(UIButton *) buttonIndexPressed;

.m

-(IBAction)segmentSwitch:(UIButton *) buttonIndexPressed
{
    if (buttonIpressed == index0)
    {
        [segmentControl setImage:[UIImage imageNamed:@"Seg1Sel.png"]];
        NSLog(@"index 0 pushed");

        index0.enabled = NO;
        index1.enabled = YES;
        index2.enabled = YES;        
    }
    else if (buttonIpressed == index1)
    {
         [segmentControl setImage:[UIImage imageNamed:@"Seg2Sel.png"]];
         NSLog(@"index 1 pushed");

         index0.enabled = YES;
         index1.enabled = NO;
         index2.enabled = YES;
    }
    else if (buttonIpressed == index2)
    {
        [segmentControl setImage:[UIImage imageNamed:@"Seg3Sel.png"]];
        NSLog(@"index 2 pushed");

        index0.enabled = YES;
        index1.enabled = YES;
        index2.enabled = NO;
    }
}
于 2011-08-24T15:31:35.920 に答える
6

はい、セグメント バーの各セクションに 2 つの画像 (オンとオフ) が必要です。(4コマ…8コマ)なのに全部で16種類!(すべて、GUI で 1 行しか消費しません。)

元のセグメント バーのグラフィックを非表示にするにはどうすればよいですか?

アルファを 0 に設定できません (画像も非表示になります)。

「tintClear」を「クリア」に設定できません。(白黒にする理由がわかりません。)

「非表示」に設定できません...何も機能しません。

「背景」を「クリア」に設定できません。(背景はセグメントバーのグラフィックではありません。)

于 2010-09-21T02:54:51.570 に答える
2

それはうまく機能します

[segmentControl setImage:[UIImage imageNamed:@"Rolenew.png"] forSegmentAtIndex:0];
于 2012-08-01T09:54:22.083 に答える
1

HMSegmentedControl を試してみてください。画像やその他の設定も可能です。https://github.com/HeshamMegid/HMSegmentedControlで入手可能

于 2015-02-19T09:35:14.610 に答える
0

これを行うには、UIControlEventValueChangedをリッスンし、自分で画像を変更する必要があります。UISegmentedControl をサブクラス化する必要はありません。継承よりも構成が優先されることを忘れないでください。

于 2009-08-15T15:43:48.773 に答える