Zusätzlich zu DexterWs Antwort. Ich war zu der gleichen Entscheidung gekommen - UISegmentedControl
nur mit UIButtons
nachzuahmen. Es ist jedoch keine einfache Aufgabe, UISegmentControl
nachzuahmen. Ich habe versucht, Selected
Zustand eines UIButton
zu verwenden, aber UIButton
funktioniert nicht wie erwartet, wenn dieselben Einstellungen (BG-Bild, Schriftfarbe) für Hightlighted
und Selected
Staaten festgelegt werden. In diesem Fall, wenn das Segment ausgewählt ist, ist es visuell noch "pressbar". Also, um es zu vermeiden und machen Schaltflächen setzen mehr wie UISegmentedControl
Ich habe einen selected
Zustand überhaupt nicht verwendet. Statt dessen entschied sich Id, das Aussehen der ausgewählten Schaltfläche im Code so zu ändern, dass die Zustände normal
und highlighted
für die ausgewählte Schaltfläche visuell und für die nicht ausgewählte identisch sind.
Angenommen, ich habe 3 Tasten segmentedControl (LeftSgm | MiddleSgm | RightSgm) und für den normalen Zustand Im mit bg Bild mit dem Namen "segment_default" und Schriftfarbe weiß und für ausgewählte State seine BG-Bild namens "segment_active" und schwarze Schrift. So in OnTouchDown:
-(IBAction)onTopMenuTap:(id)sender
{
int newSelectedSegmentIndex;
if (sender == btnLeftSgm)
newSelectedSegmentIndex=0;
else if (sender == btnMiddleSgm)
newSelectedSegmentIndex=1;
else if (sender == btnRightSgm)
newSelectedSegmentIndex=2;
else
return;
NSLog(@"Tapped segment index %d while old one is %d",newSelectedSegmentIndex,selectedSegmentIndex);
if (newSelectedSegmentIndex==selectedSegmentIndex)
return;
[self handleSegmentAppearenace:newSelectedSegmentIndex];
//do whatever its need to be done
...
}
und die aufgerufene Methode ist
-(void)handleSegmentAppearenace:(int)newSelectedSegmentIndex
{
if (selectedSegmentIndex==0){
[btnLeftSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_default_left"] forState:UIControlStateNormal];
[btnLeftSgm setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
btnLeftSgm.highlighted = NO;
}
else if (selectedSegmentIndex==1){
[btnMiddleSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_default_center"] forState:UIControlStateNormal];
[btnMiddleSgm setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
btnMiddleSgm.highlighted = NO;
}
else if (selectedSegmentIndex==2){
[btnRightSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_default_right"] forState:UIControlStateNormal];
[btnRightSgm setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
btnRightSgm.highlighted = NO;
}
if (newSelectedSegmentIndex==0){
[btnLeftSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_active_left"] forState:UIControlStateNormal];
[btnLeftSgm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
btnLeftSgm.highlighted = YES;
}
else if (newSelectedSegmentIndex==1){
[btnMiddleSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_active_center"] forState:UIControlStateNormal];
[btnMiddleSgm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
btnMiddleSgm.highlighted = YES;
}
else if (newSelectedSegmentIndex==2){
[btnRightSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_active_right"] forState:UIControlStateNormal];
[btnRightSgm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
btnRightSgm.highlighted = YES;
}
}
Alle drei Tasten in IB gebunden sind mit entsprechenden Eigenschaften (btnRightSgm usw.). Auch für "Touch Up Event" ist onTopMenuTap gebunden.
Kann nicht sagen, es ist eine beste Idee, aber es funktioniert perfekt für mich.