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.