18

プログラムで 0 にリセットしようとしている 2 つのセグメント (インデックス: 0 と 1) を持つ UISegmentedControl があります。以下のコマンドを実行すると、期待どおりにセグメント インデックスが 0 にリセットされません。代わりに、インデックス 1 のセグメントが強調表示されます。

    [seg setSelectedSegmentIndex:0];

奇妙なことに、選択したセグメントをログに記録すると、 が返されます0

    NSLog(@"seg setSelectedSegmentIndex %d", seg.selectedSegmentIndex); 

また、奇妙なことに、実行後、setSelectedSegmentIndex:0セグメント 0 をタッチで手動で再選択することはできません。セグメント 1 にロックされているように見えますが、1 をタップすると正常に機能します。

ボタンの設定は次のとおりです。

    itemArray = [NSMutableArray arrayWithObjects: @"Zero", @"One", nil];
    seg = [[UISegmentedControl alloc] initWithItems:itemArray];
    [seg setFrame:segRect];
    seg.segmentedControlStyle = UISegmentedControlStyleBar;
    seg.momentary = NO;
    [seg addTarget:self action:@selector(someAction:) forControlEvents: UIControlEventValueChanged];
    [mainView addSubview:seg];

注:この質問で達成しようとしていたことをもう一度述べると、変数を介して UISegmentedControl の選択されたインデックスを動的に設定し、適切な視覚的フィードバックを取得し、メソッドで選択されたインデックスをチェックして、選択したものに応じて何かを実行したいと考えています。索引。解決策については、以下の私の回答を参照してください。

4

7 に答える 7

30

Change in viewDidLoad:

[seg setSelectedSegmentIndex:index];

you change use the index value as your wish.

于 2013-01-24T07:08:03.460 に答える
2

コードから、あなたはただ行うことができますseg.selectedSegmentIndex = someDefaultIndex.

設定する必要があるかどうかviewDidLoad:は、アプリケーションの構造に完全に依存します。たとえば、アプリが初めて起動してビューをロードし、前回アプリを実行したときの値にコントロールを設定する必要がある場合、そこでそれを行うのは間違いなく理にかなっています。

于 2013-01-24T06:08:21.167 に答える
2

スイフト3.0

segmentedControl.selectedSegmentIndex = #your value#
于 2017-08-19T09:26:52.060 に答える
1

これは、視覚的なフィードバックの観点から、選択したセグメントを並べ替えるのに役立ちます。これは、選択したセグメントをプログラムで設定した後、セグメントに適切な色を付けます。

for (int i=0; i<[seg.subviews count]; i++)
{

    if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && [[seg.subviews objectAtIndex:i]isSelected])
    {
        [[seg.subviews objectAtIndex:i] setTintColor:[UIColor grayColor]];
    }
    if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && ![[seg.subviews objectAtIndex:i] isSelected])
    {
        [[seg.subviews objectAtIndex:i] setTintColor:[UIColor blackColor]];
    }
}
于 2013-01-24T08:27:44.970 に答える
0

警告: これは質問への完全な回答ではありませんが、密接に関連しています。

同様の問題がありました。ほとんどの場合、UISegmentedController は問題なく動作しました。オフ、30、60、120 の 4 つのセグメントがあります。

ランダムな間隔で (通常はリリースの直前に!!)、オフ セグメントはユーザー インターフェイスから選択できなくなります。(コードから選択しようとはしませんでした。それは私がする必要がなく、問題を解決しないからです。)

解決策は、その UISegmentedController を XIB から削除し、それを新しい (まったく同じ) ものに置き換えることです。

CMD-C と CMD-V で、問題のある UISegmentedController を別のアプリの XIB に入れました。また、オフ セグメント (つまり、インデックス 0 のセグメント) も、その XIB では選択できませんでした。

これは XCode の問題のようです。

于 2013-01-25T19:41:30.517 に答える
0

この質問で達成しようとしていたことを言い換えると、変数を介して UISegmentedControl の選択されたインデックスを動的に設定し、適切な視覚的フィードバックを取得し、メソッドで選択されたインデックスをチェックして、選択されたインデックスに応じて何かを実行したいと考えています。

当初、これは mySegmentedController.selectedSegmentIndex = someIndex のように単純であると推測し、次にインデックスをテストしました。しかし、私の質問で述べたように、それは私にとってはうまくいきませんでした。振る舞いは奇妙です。そのコードを実行した後、適切なボタンが強調表示されません。

ここに私が修正したプロジェクトがあるので、うまくいきます。なぜそれが機能するのか正確にはわかりません。おそらく、インデックスを設定する前に、そこに遅延を入れました。改善できる場合は、プロジェクト ファイルを更新してコメントします。

http://owolf.net/uploads/StackOverflow/SegmentedControllers.zip

于 2013-01-25T07:25:24.907 に答える