Mit UISegmentedControl als button
In meinem code, den ich verwende einen UISegmentedControl
als ein "button" mit nur EINEM segment und die momentary
- Eigenschaft auf YES
. In den Versionen des SDK vor iOS 4 war dies kein problem, aber es scheint, dass jetzt iOS 4 verlangt, dass es mindestens 2 Segmente. Der folgende code löst eine Ausnahme:
NSArray *titles = [NSArray arrayWithObject:@"Button Title"];
myButton = [[UISegmentedControl alloc] initWithItems:titles];
und nun im Interface Builder, die Sie selbst nicht schaffen eine UISegmentedControl mit weniger als 2 Segmente. Es meldet den folgenden Fehler beim bauen:
"Die Anzahl der Segmente, die Eigenschaft eines segmentierten Kontrolle muss größer als oder gleich 2 ist."
Bin ich irgendwie ratlos. Jede Arbeit, Tips und Tricks dafür? Ich habe versucht, zu erstellen eine UISegmentedControl
mit zwei Knöpfen und entfernen Sie dann eine programmatisch-und das "funktioniert", wie es nicht dazu führen, dass die app zum Absturz. Bekomme ich einen button in iOS 3 und nichts in iOS 4. Irgendwelche Ideen?
- Das nervt mich auch. Ich verwende es als Ersatz für die "Glas" - Taste, die Apple noch nicht in den öffentlichen Teil des SDK.
- Ich verwendet, um das gleiche zu tun für die farbigen Tasten in iOS3, aber Sie scheinen zu haben, entfernt diese Funktion in iOS4.
- Wie es aussieht, haben Sie vergessen, die null als zweite element im Titel-array. Siehe unten meine Antwort für funktionierenden code.
- arrayWithObject: dauert nur ein argument. Sie denken arrayWithObjects:
- Sorry, du hast Recht. Aber die Quintessenz ist, dass arrayWithObjects mit null als zweiten parameter, wird den trick tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wirklich seltsam. Es funktioniert immer noch gut für mich sowohl in iOS4 simulator und Gerät (dies ist eine echte Arbeits-snippet aus meinem code):
Haben Sie versucht das:
Ist es nicht gerade ein code-bezogene Lösung, aber: ich traf ein ähnliches Problem und endete Zeichnung meiner eigenen ähnlich aussehende Ressourcen in Photoshop. Es war nicht furchtbar schwer zu tun, und entfernt einen bestimmten schlechten "code smell", IMO.
Ich gefunden, wenn Sie einem früheren Projekt mit einer single-segment-UISegmentedControl, können Sie öffnen Sie das Projekt, und die neue im Interface Builder und ziehen Sie (oder kopieren/einfügen) die Einzel-segment UISegmentedControl, um den neuen view-controller. Es funktioniert gut, sowohl in der app und Interface Builder, nur nicht, ändern Sie die Anzahl der Segmente von 1 auf etwas anderes als es nicht zulassen, Sie gehen zurück. Ich bin mit Xcode 4.6.2 und iOS 6.
Den editor im Interface Builder lassen Sie nicht ändern Sie die Anzahl der Segmente kleiner als 1, aber Sie können ein segmentiertes Steuerelement in IB durch Bearbeiten der .xib-xml manuell.
Open As
->Source Code
aus dem popup-Menü.Finden "
<segments>
das ist der Anfang der xml-array von Segmenten. Das ganze sollte so Aussehen:Einfach löschen
<segment title="Segment 2 Title"/>
es gibt also nur ein segment element.Open As -> Interface Builder - iOS
zurück zum interface builder.Sollten Sie auch wahrscheinlich der segmentierten Steuerelements auf "momentary" - Modus.
Ich bekomme keine Fehler, die das kompilieren und ausführen dieses. Natürlich, dies ist ein hack, und zerbrechen Dinge, die unter gewissen Umständen oder in einer zukünftigen iOS-Version.
Nun zwei Möglichkeiten:
1) Erstellen Sie eine Taste und die set Bild als hintergrund auf den einzelnen Punkt des UISegmentedControl
Wenn Ihr SegmentedControl ist eine Klasse, variable, ersetzen Sie einfach die @property
In die Kommentarzeichen vor der viewDidLoad-Funktion fügen Sie die folgenden
2) Setzen Sie die Anzahl der Segmente auf drei Ihrer UISegmentedControl und danach stellen Sie die Breite auf 20 - jetzt nur noch den Punkt in der Mitte angezeigt werden.
Vergessen Sie nicht, wenn der Benutzer interagiert mit dem UISegmentedControl, setzen Sie das currentElement erneut, um das zweite segment, da sonst der Punkt wird in Licht Grau statt weiß Zustand.
3) Platzieren Sie eine Schaltfläche oder eine kleine Ansicht über die unerwünschte zweite Punkt der UISegmentedControl im InterfaceBuilder. Stellen Sie sicher, dass die Hintergrundfarbe ist auch.
Wenn Sie eine Taste festlegen, die der Staat für "Benutzer-Interaktion" im Attribut-inspector zu deaktivieren. Als Typ würde ich wählte "custom", da Sie nicht einige Grenzen in Ihrer button 😉
Jetzt Stecker wieder sicher, dass immer der erste Punkt ist das aktive Element.
Aber ich denke, die Lösung sollte man den Weg, den Sie gehen sollten, da Apple dachte etwas über Sie, wenn Sie deaktiviert die 1-Punkt-SegmentedControl. Da man sich mit der Steuerung als Taste das Element, das Sie suchen fpr eine Schaltfläche sein sollte. 😉
Es gibt keine Problemumgehung, die in iOS 4. Wenn Sie diese Funktionalität benötigen, einen bug (enhancement request) an bugreport.apple.com.
Können Sie auch
removeSegmentAtIndex:animated:
. Wenn Sie ein segmentiertes Steuerelement in ein storyboard oder eine xib-mit zwei Segmenten, die Sie entfernen können, wie dies: