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

Antworten auf die Frage(22)

Ihre Antwort auf die Frage