0

8 つのセグメントを持つセグメント化されたコントロールがあります。コントロール全体のデフォルトの色合いを変更できますが、コントロールの各セグメントに異なる色を設定できますか? このメソッドを呼び出す新しいクラスで 5.1 で動作するチュートリアルを見つけました。

-(void)setTintColor:(UIColor*)color forTag:(NSInteger)aTag{}

しかし、iOS 6 では動作しません。何かアイデアはありますか?

4

5 に答える 5

2

この問題はここで修正されました。フォーマットの問題により、ソース コードを貼り付けることができませんでした。 サンプルコードはこちら。

編集:リンクからコメントとコードを追加し、フォーマットを修正しました。〜オリー

そのハッキーな修正です。これは機能します。コードを ViewDidAppear に配置します。それはトリックを行います。

- (void)viewDidAppear:(BOOL)animated 
{
    [super viewDidAppear: animated];
    dispatch_async(dispatch_get_main_queue(), ^{
        for (int i = 0 ; i < [segmentControl.subviews count] ; i++)
        {
            if ([[segmentControl.subviews objectAtIndex: i] isSelected] )
            {
                [[segmentControl.subviews objectAtIndex: i] setTintColor: [UIColor blackColor]];
                break;
            }
        }
    }); 
}
于 2012-11-06T08:37:09.917 に答える
1

セグメントごとに異なるセグメント イメージと色を設定できます。色については、次を使用できます。

//get the subviews of the segmentedcontrol

NSArray *arri = [segmentedControl subviews];

//change the color of every subview(segment) you have

[[arri objectAtIndex:0] setTintColor:[UIColor redColor]];

[[arri objectAtIndex:1] setTintColor:[UIColor greenColor]];

問題が解決することを願っています。

于 2012-10-08T06:03:21.363 に答える
0

これは、赤色を設定し、iOS 6 と互換性のある簡単なソリューションです。

for ( UIView *segmentView in [segmentedControl subviews] ) {
    if ( [segmentView respondsToSelector:@selector(setTintColor:)] ) {
        [segmentView performSelector:@selector(setTintColor:)
                          withObject:[UIColor redColor]];
    }
}
于 2013-10-18T10:00:34.700 に答える
0

その通りです... iOS 6 は、セグメント化されたコントロールのサブビューをサポートしていません....

私はあなたのための代替手段を持っています:

CGRect rect = CGRectMake(0, 0, 80, 44);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context,
                               [[UIColor redColor] CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[segment setImage:img forSegmentAtIndex:0];

プロジェクトにコア グラフィックス フレームワークを追加する必要があります。

インデックスのセグメントの画像を描画できます....しかし、これを使用すると、セグメントのタイトルを使用してテキストを追加できなくなります。上記で使用した画像 'img' の上にもテキストを描画する必要があります。他の方法があれば共有してください。

于 2012-10-08T20:27:08.373 に答える