1

さて、セグメントを動的に削除および追加する必要があるsegmentedControlがあります。このコードは最初のセグメントを削除しますが、選択する正しいセグメントを設定しません。奇妙なことに、すべての数字を印刷すると、画面上で強調表示されたセグメントだけが常に-1で表示されます。

 if ([outControl numberOfSegments]==4) {
                int previous = [outControl selectedSegmentIndex];
                if (previous>0) {
                    previous--;
                }
                [outControl removeSegmentAtIndex:0 animated:YES];

                NSLog(@"setting to %d with %d segments", previous ,[outControl numberOfSegments]);
                [outControl setSelectedSegmentIndex:previous];


            }

これは、3つのセグメントを持つ1へのログ設定です。このログでは、セグメント0が実際にコントロールで選択されており、コントロールが選択されていると見なすため、セグメント1を押すことができませんか?セグメント0が選択された状態で表示されているにもかかわらず、セグメント0を押すことができます。

これが私の問題を明確にするためのスクリーングラブです。

image ログからわかるように、セル1が実際に選択されているため、セル内のテキストは正しいです。しかし、強調表示されたセルは0です!?それは私を夢中にさせます。セグメントを追加するときにすべて機能しますが、削除するときにのみ問題が発生します。

誰かがそれがどこで間違っているのか見ることができますか?

どうもありがとう

ジュール

新しく選択したセグメントを設定しなくても同じ結果が得られることに気づきました。つまり、間違ったセグメントが選択されています..... ?? また、それが誰かを助けるなら、これはすべてcellForRowAtIndexPathでコード化されていますか?

4

1 に答える 1

1

コードは正しく見えますが、説明したとおりに(間違って)動作します。実行ループのセグメント削除と同じターンで選択を変更すると、コントロールが厄介な状態になるようです。しかし、これは機能します:

-(void)setSegmentedSelection:(NSNumber *)indexNum {
    NSInteger index = [indexNum intValue];
    [outControl setSelectedSegmentIndex:index];
}

// then instead of setting the selected index after the segment is removed,
// let the run loop return...

[self performSelector:@selector(setSegmentedSelection:) withObject:[NSNumber numberWithInt:previous] afterDelay:0.0];

あなたがコーディングしたようにそれが機能しないことに私は驚いています、しかし少なくとも私たちがそれを理解するまでの回避策はここにあります。

于 2012-04-19T16:37:41.207 に答える