Feste Bezeichnungen in der Auswahlleiste eines UIPickerView
In der Uhrenanwendung zeigt der Timer-Bildschirm einen Picker (wahrscheinlich einUIPicker
imUIDatePickerModeCountDownTimer
mode) mit Text in der Auswahlleiste (in diesem Fall "Stunden" und "Minuten").
(Bearbeiten) Beachten Sie, dass diese Bezeichnungen @ sinFes: Sie bewegen sich nicht, wenn das Greifrad rollt.
Gibt es eine Möglichkeit, solche festen Bezeichnungen in der Auswahlleiste eines Standards @ anzuzeigeUIPickerView
component?
Ich habe keine API gefunden, die dabei helfen würde. Ein Vorschlag war, ein @ hinzuzufügUILabel
als Unteransicht des Pickers, aber das hat nicht funktioniert.
Antworte
Ich bin Ed Martys Rat gefolgt (Antwort unten) und es funktioniert! Nicht perfekt, aber es sollte Leute zum Narren halten. Als Referenz, hier ist meine Implementierung, zögern Sie nicht, es besser zu machen ...
- (void)viewDidLoad {
// Add pickerView
self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectZero];
[pickerView release];
CGSize pickerSize = [pickerView sizeThatFits:CGSizeZero];
CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
#define toolbarHeight 40.0
CGFloat pickerTop = screenRect.size.height - toolbarHeight - pickerSize.height;
CGRect pickerRect = CGRectMake(0.0, pickerTop, pickerSize.width, pickerSize.height);
pickerView.frame = pickerRect;
// Add label on top of pickerView
CGFloat top = pickerTop + 2;
CGFloat height = pickerSize.height - 2;
[self addPickerLabel:@"x" rightX:123.0 top:top height:height];
[self addPickerLabel:@"y" rightX:183.0 top:top height:height];
//...
}
- (void)addPickerLabel:(NSString *)labelString rightX:(CGFloat)rightX top:(CGFloat)top height:(CGFloat)height {
#define PICKER_LABEL_FONT_SIZE 18
#define PICKER_LABEL_ALPHA 0.7
UIFont *font = [UIFont boldSystemFontOfSize:PICKER_LABEL_FONT_SIZE];
CGFloat x = rightX - [labelString sizeWithFont:font].width;
// White label 1 pixel below, to simulate embossing.
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, top + 1, rightX, height)];
label.text = labelString;
label.font = font;
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor clearColor];
label.opaque = NO;
label.alpha = PICKER_LABEL_ALPHA;
[self.view addSubview:label];
[label release];
// Actual label.
label = [[UILabel alloc] initWithFrame:CGRectMake(x, top, rightX, height)];
label.text = labelString;
label.font = font;
label.backgroundColor = [UIColor clearColor];
label.opaque = NO;
label.alpha = PICKER_LABEL_ALPHA;
[self.view addSubview:label];
[label release];
}