2013-01-24 8 views
17

Ich habe eine UISegmentedControl mit zwei Segmenten (Index: 0 und 1), die ich programmgesteuert auf 0 zurücksetzen möchte. Wenn ich den folgenden Befehl ausführen, wird der Segmentindex nicht auf 0 zurückgesetzt erwartet. Stattdessen hebt es Segment 1. indiziert SeltsamerÄndern Sie UISegmentiertControl ausgewählten Index oder Wert programmgesteuert

[seg setSelectedSegmentIndex:0]; 

, wenn ich das ausgewählte Segment einzuloggen, es gibt 0.

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

Auch seltsam, nachdem setSelectedSegmentIndex:0 lief ich nicht Segment 0 manuell durch Berührung erneut auswählen kann, so scheint es Segment 1, gesperrt zu werden, bis ich 1 tippen, wobei es als normal funktioniert. Hier

ist die Einrichtung für die Schaltfläche:

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

HINWEIS: neu zu formulieren, was ich mit dieser Frage zu erreichen versuchte: Ich habe eine UISegmentedControl des ausgewählten Index über eine Variable dynamisch einstellen möchten, erhalten die angemessenes visuelles Feedback und überprüfen Sie den ausgewählten Index in einer Methode, um etwas abhängig von dem ausgewählten Index geschehen. Siehe meine Antwort unten für eine Lösung.

+0

sind beide Segmente aktiviert, bevor Sie versuchen, zu wählen? (mit isEnabledForSegmentAtIndex) –

+0

@calvinBhai Ich denke ja, wäre die Standardeinstellung nicht aktiviert? – Mrwolfy

+0

Ich habe das gleiche Problem, Segment 0 kann nicht erneut ausgewählt werden, sobald einer der anderen gewesen ist. Ich werde jetzt mit einem Workaround von einem leeren Seg 0 freigeben. Mein Segment befindet sich in einem UIControl in einem UIScrollView. Ich hatte das Problem zuvor, als iOS 5 funktionierte, aber die gleiche Binärdatei auf iOS6 zeigte dieses Problem. –

Antwort

27

Änderung viewDidLoad:

[seg setSelectedSegmentIndex:index]; 

ändern Sie den Indexwert als Ihr Wunsch verwenden.

+0

Ja. Das mache ich. Vielen Dank. – Mrwolfy

1

Von Code können Sie einfach seg.selectedSegmentIndex = someDefaultIndex tun.

Ob Sie es in viewDidLoad: setzen oder nicht, hängt vollständig von der Struktur Ihrer Anwendung ab. Wenn Ihre App beispielsweise gestartet wird und die Ansicht zum ersten Mal lädt und das Steuerelement auf den Wert einstellen muss, den es während der vorherigen Ausführung der App hatte, ist es sinnvoll, es dort zu machen.

1

Dies hilft bei der Sortierung des ausgewählten Segments in Bezug auf das visuelle feedbak, das nach dem programmatischen Einstellen des ausgewählten Segments die Segmente richtig einfärbt.

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

neu zu formulieren, was ich mit dieser Frage zu erreichen versuche: Ich habe eine UISegmentedControl der ausgewählten Index über eine Variable gesetzt werden soll das entsprechende visuelle Feedback dynamisch, erhalten und überprüfte in einem Verfahren den gewählten Index, etwas zu machen, geschehen abhängig vom ausgewählten Index.

Ursprünglich vermutete ich, dass dies so einfach ist wie: mySegmentedController.selectedSegmentIndex = someIndex, dann für den Index testen. Aber wie in meiner Frage gesagt, funktionierte es nicht für mich. Das Verhalten ist seltsam. Nach dem Ausführen dieses Codes würde die entsprechende Schaltfläche nicht hervorgehoben.

Hier ist ein Projekt, bei dem ich es repariert habe, also funktioniert es. Nicht sicher, warum es genau funktioniert. Möglicherweise habe ich eine Verzögerung eingefügt, bevor ich den Index gesetzt habe. Ich werde die Projektdatei aktualisieren und kommentieren, wenn ich sie verfeinern kann.

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

0

ACHTUNG: Dies ist nicht ganz die Frage zu beantworten, ist aber eng miteinander verbunden.

Ich hatte ein ähnliches Problem. Meistens funktionierte mein UISegmentedController einwandfrei. Es hat 4 Segmente, Aus, 30, 60 und 120.

In zufälligen Intervallen (normalerweise kurz vor einer Freigabe !!) wird das Off-Segment von der Benutzeroberfläche aus nicht auswählbar. (Ich habe es nicht aus dem Code ausgewählt, da dies nicht notwendig ist und mein Problem nicht lösen wird.)

Die Lösung besteht darin, den UISegmentedController von meinem XIB zu löschen und durch einen neuen (und genau identisch), der dann gut funktioniert.

Ich sogar CMD-C und CMD-V'd der störende UISegmentedController in eine andere XIB der App. Und das Off-Segment (d. H. Das in Index 0) war in diesem XIB ebenfalls nicht auswählbar.

Dies scheint ein Problem mit XCode zu sein.

0

Swift 3,0

segmentedControl.selectedSegmentIndex = #your value# 
Verwandte Themen