2016-05-04 11 views
0

Meine UISegmentControl hat keine Grenzen und Segmenttrennzeichen. Ich möchte eine Linie unterhalb des ausgewählten Segments platzieren. Ich habe versucht, dies zu tun:UISegmentControl untere Zeile auf ausgewählten Index

CALayer *bottomLayer = [CALayer layer]; 
bottomLayer.borderColor = [UIColor blackColor].CGColor; 
bottomLayer.borderWidth = 3; 

// Calculating frame 
CGFloat width   = segment.frame.size.width/segment.numberOfSegments; 
CGFloat x    = 0; 
CGFloat y    = segment.frame.size.height - 5; 
bottomLayer.frame  = CGRectMake(x, y,width, 2); 

[bottomLayer setName:@"bottom"]; 
// Adding selection to segment 
[segment.layer addSublayer:bottomLayer]; 

Dies bringt eine Zeile, wenn ich das Segment klopfen. Aber wenn ich den Wasserhahn loslasse, ist die Linie nicht mehr zu sehen. Ich verwende UIControlEventValueChanged als controlEvent.
Wie kann ich dies erreichen ohne mit Dritten.

+0

Sie können nicht ohne Dritte erreichen, aber ich schlage vor, Sie verwenden Knopf und Bildanzeige für Linie. animiere die Bildansicht unter der Schaltfläche mit Hilfe der Animation. Das ist der beste und einfachste Weg. –

Antwort

0

UISegmentedControl ist eine Klasse, die von UIView erbt, sodass Sie Unteransichten hinzufügen/entfernen können. Anstatt CALayer würde ich empfehlen, eine UIView oder UIImageView zu verwenden, um die Zeile darunter zu platzieren.

UIView *bottomView = [[UIView alloc] init]; 
bottomView.backgroundColor = [UIColor blackColor]; 

// Calculating frame 
CGFloat width   = segment.frame.size.width/segment.numberOfSegments; 
CGFloat x    = 0; 
CGFloat y    = segment.frame.size.height - 5; 
bottomView.frame   = CGRectMake(x, y,width, 2); 

// Adding selection to segment 
[segment addSubview:bottomView]; 

Instantiate Ihre Subviews global, damit Sie sie entfernen oder ändern es Opazität ist (das heißt bottomView.alpha = 0) bei UIControlEventValueChanged,

0

Sie dies erreichen können, indem subview von segment control ausgewählt zu werden. Hier ist Beispielcode dies in viewDidLoad für Standard ausgewählte Segment setzen und setzen in UIControlEventValueChanged -

CALayer *bootomBorder = [CALayer layer]; 
bootomBorder.backgroundColor = [UIColor greenColor].CGColor; 
bootomBorder.frame = CGRectMake(0, userProfileSagmentOutlet.subviews[userProfileSagmentOutlet.selectedSegmentIndex].frame.size.height-1, userProfileSagmentOutlet.frame.size.width/userProfileSagmentOutlet.numberOfSegments-2, 1.0f); 
[userProfileSagmentOutlet.subviews[userProfileSagmentOutlet.selectedSegmentIndex].layer addSublayer:bootomBorder]; 

Sie können auch auf diesen Link verweisen kann dies dazu beitragen wird du- https://stackoverflow.com/a/37705692/5097148

Verwandte Themen