Ok Ich habe Probleme herauszufinden, wie man das angehen kann.UIPickerView und UITextField erhalten Wert von UIPickerView
Ich habe ein UITextField, das ich dynamisch zu einem UITableView gemäß den Definitionen einer XML-Datei hinzufüge, in der XML-Datei kann ich eine Liste als einen der Datentypen angeben und was ich dann mache, ist eine UIPickerView, die angezeigt wird die Liste zu der inputView meines spezifischen UITextField.
Was ich habe Probleme mit ist es, herauszufinden, wie der ausgewählte Wert aus dem UIPickerView zu nehmen und es auf den Text Eigenschaft meiner UITextField hinzufügen
Mein UIPickerView ist eine benutzerdefinierte Klasse, aber ich hinzugefügt keine zusätzliche Funktionalität, die ich nur Überschreiben Sie es, um es zu ermöglichen, eine Datenquelle als Eigenschaft an die UIPickerView zu übergeben.
Hier ist meine PickerViewDataSourceAndDelegate.h
#import <Foundation/Foundation.h>
@interface PickerViewDataSourceAndDelegate : UIPickerView <UIPickerViewDelegate, UIPickerViewDataSource>
@property (nonatomic, strong) NSMutableArray *pickerData;
@end
Und es ist .m-Datei
#import "PickerViewDataSourceAndDelegate.h"
@implementation PickerViewDataSourceAndDelegate
@synthesize pickerData;
-(id)init {
if (self = [super init])
{
self.pickerData = [[NSMutableArray alloc] init];
}
return self;
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
return [self.pickerData count];
}
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [self.pickerData objectAtIndex:row];
}
@end
Dies ist, wie ich die UITextField mit dem UIPickerView als inputView
for(NodeProperty *nodeproperty in node.properties)
{
if(nodeproperty.flowDirection == (FlowDirection*)Output)
{
if([nodeproperty.typeName isEqualToString:@"System.String"] && nodeproperty.extendedType == (ExtendedType*)None && [nodeproperty.enumValues count] == 0)
{
...
}
else if([nodeproperty.typeName isEqualToString:@"System.String"] && nodeproperty.extendedType == (ExtendedType*)MultilineText && [nodeproperty.enumValues count] == 0)
{
...
}
else if([nodeproperty.typeName isEqualToString:@"System.Boolean"] && nodeproperty.extendedType == (ExtendedType*)None && [nodeproperty.enumValues count] == 0)
{
...
}
else if([nodeproperty.typeName isEqualToString:@"System.Double"] && nodeproperty.extendedType == (ExtendedType*)None && [nodeproperty.enumValues count] == 0)
{
...
}
else if([nodeproperty.typeName isEqualToString:@"System.String"] && nodeproperty.extendedType == (ExtendedType*)None && [nodeproperty.enumValues count] > 0)
{
UILabel *fieldLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 290, 20)];
fieldLabel.text = nodeproperty.name;
[rowsInSectionLabels addObject:fieldLabel];
PickerViewDataSourceAndDelegate *pickerDataDel = [[PickerViewDataSourceAndDelegate alloc] init];
pickerDataDel.pickerData = nodeproperty.enumValues;
pickerDataDel.dataSource = pickerDataDel;
pickerDataDel.delegate = pickerDataDel;
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(5, 25, 290, 30)];
[textField setBorderStyle:UITextBorderStyleRoundedRect];
textField.inputView = pickerDataDel;
[rowsInSection addObject:textField];
}
else
{
....
Für Leerzeichen Ich habe etwas von dem Platz weggelassen, wenn einige Dinge unklar sind, werde ich gerne erklären.
Alles perfekt ohne Ausnahmen funktioniert, ich will nur aus dem Picker
Mein Problem ist, wie kann ich weitergeben es zurück zu meinem textfield, wie ich mehrere textfields haben kann, die Pickerviews in ihrem inputView haben, also kann ich nicht alles dynamisch aufgebaut werden – Armand
Sehen Sie updated answe r – jrturton
Ihre Bearbeitung ist sehr ähnlich zu dem, was ich getan habe, ich werde Ihre Antwort akzeptieren, da sie mich in die richtige Richtung zu dem führt, was ich getan habe. Für den Moment behalte ich es so, wie ich es gemacht habe, bis ich meine Demo gemacht habe, dann kann ich sie noch optimieren. Vielen Dank – Armand