2012-04-19 12 views
1

私は動的にセグメントを削除して追加する必要があるsegmentedControlを持っています。このコードは最初のセグメントを削除しますが、次に選択する正しいセグメントを設定しません。奇妙なことは、すべての数字が正しいことを印刷するときです。画面上の強調表示されたセグメンテーションであり、常に-1で表示されます。uisegmented control手動で選択したインデックスを設定しない

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ですべてコード化されていますか?

答えて

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]; 

私はあなたがコード化されたとして、それが動作しないことを驚いているが、我々はそれを理解するまで、少なくともここでの回避策です。

+0

ありがとうございます私はこれを使用します。それ以外の方法でセグメントを挿入すると奇妙です。 – Jules

+0

実際にこれを試しましたが、先ほど説明したのと同じ結果が得られました。残念ながら、それは仕事をしなかった。 – Jules

+0

何かが続いています。私はテストプロジェクトであなたのコードを実行し、あなたが記述したように動作しませんでした。それを追加すると固定されます。 – danh

関連する問題