2 Stimmen

IPhone - Update Label von UIPickerView

Ich habe zwei UIPickerViews auf einer Ansicht unter demselben Ansichtscontroller eingerichtet. Die Picker scheinen mit den erwarteten Werten bevölkert zu sein. Ich habe auch ein Label für jeden Picker. Das Label wird bei jeder Wertänderung aktualisiert, aber der auf dem Label angezeigte Wert ist nicht korrekt. Er liegt immer um 10 daneben. Die Codes sind unten aufgeführt.

Interface:

#import 
#import "InfoViewController.h"

@interface TransactionsViewController : UIViewController {

    //Einlage
    NSMutableArray *einzahlungsArray;
    IBOutlet UIPickerView *einzahlungsPicker;
    IBOutlet UILabel *einzahlungsLabel;

    //Senden
    NSMutableArray *sendenArray;
    IBOutlet UIPickerView *sendenPicker;
    IBOutlet UILabel *sendenLabel;
}

@property (nonatomic, retain) NSMutableArray *einzahlungsArray;
@property (nonatomic, retain) IBOutlet UIPickerView *einzahlungsPicker;
@property (nonatomic, retain) NSMutableArray *sendenArray;
@property (nonatomic, retain) IBOutlet UIPickerView *sendenPicker;
@property (nonatomic, retain) IBOutlet UILabel *einzahlungsLabel;
@property (nonatomic, retain) IBOutlet UILabel *sendenLabel;

@end

Implementierung:

#import "TransactionsViewController.h"

@implementation TransactionsViewController
@synthesize einzahlungsArray;
@synthesize einzahlungsPicker;
@synthesize sendenArray;
@synthesize sendenPicker;
@synthesize einzahlungsLabel;
@synthesize sendenLabel;

}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray *dollarsArray = [[NSMutableArray alloc] init];
    for (int i = 5; i <= 100; i+=5)
    {
        NSString *item = [[NSString alloc] initWithFormat:@"%i", i];
        [dollarsArray addObject:item];

        [item release];
    }

    self.einzahlungsArray = dollarsArray;
    self.sendenArray = dollarsArray;

    [dollarsArray release]; 

}

// Picker
#pragma mark - Picker
#pragma mark Picker Datenquellenmethoden

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if(pickerView == einzahlungsPicker) {
    switch(component) {
        case 0:
            return 1;
            break;
        case 1:
            return [einzahlungsArray count];
            break;
        default:
            break;
    }
    }
    else if(pickerView == sendenPicker) {
        switch(component) {
            case 0:
                return 1;
                break;
            case 1:
                return [sendenArray count];
                break;
            default:
                break;
        }
    }
    return 0;
}

-(CGFloat)pickerView:(UIPickerView*)pickerView widthForComponent:(NSInteger)component {
    switch (component) {
        case 0:
            return 50;
            break;
        case 1:
            return 100;
            break;
        default:
            break;
    }
    return 0;
}

#pragma mark Picker Delegatmethoden

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if(pickerView == einzahlungsPicker) {
    switch(component) {
        case 0:
            return @"$";
            break;
        case 1:
            einzahlungsLabel.text=[einzahlungsArray objectAtIndex:row];
            return [einzahlungsArray objectAtIndex:row];
            [einzahlungsLabel release];
            break;
        default:
            break;
    }
    }
    else if(pickerView == sendenPicker) {
        switch(component) {
            case 0:
                return @"$";
                break;
            case 1:
                return [sendenArray objectAtIndex:row];
                break;
            default:
                break;
        }
    }
    return 0;
}

//Picker Ende

- (void)didReceiveMemoryWarning {
    // Gibt die Ansicht frei, wenn sie kein Superview hat.
    [super didReceiveMemoryWarning];

    // Gibt alle zwischengespeicherten Daten, Bilder usw. frei, die nicht verwendet werden.
}

- (void)viewDidUnload {
    // Gibt alle gehaltenen Teilsichten der Hauptansicht frei.
    // z.B. self.myOutlet = nil;

}

- (void)dealloc {
    [einzahlungsArray release];
    [senden release];
    [super dealloc];

}

@end

Alles, wie das sendLabel, ist noch nicht eingerichtet. Wie Sie sehen können, wird das einzahlungsLabel automatisch mit der ausgewählten Zeile aktualisiert, jedoch wird der Wert nicht auf den korrekten Wert aktualisiert. Ich bin mir nicht sicher, ob es meine Implementierung des Labels oder des Pickers selbst ist, das das Problem darstellt.

Ich würde mich über einige Rückmeldungen freuen. Vielen Dank.

1voto

Die titleForRow-Methode ist genau der Ort, an dem Sie den Text für die Zeile zurückgeben sollen. In Ihrem titleForRow macht es keinen Sinn, den Label-Text dort zu setzen (und ich denke auch nicht, dass Sie ihn freigeben sollten). Das "return 0" am Ende von titleForRow kann auch Probleme verursachen.

Um eine tatsächliche Auswahl in einem Picker zu behandeln, verwenden Sie die didSelectRow Methode.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X