在使用选择器视图时

时间:2016-11-15 09:15:52

标签: ios objective-c

enter image description here $指定数组的数据未显示在pickerView中。我做错了什么,因为我无法识别我的错误。         它的.m文件代码:     // PickerViewController.m     // dropDownButtonTry     //

#import "PickerViewController.h"

@interface PickerViewController ()
{
    NSArray *genderArray;
     NSArray *cityArray;
    NSArray *currentArray;
    UITextField *currentTextField;
}

@end

@implementation PickerViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    cityArray = [[NSArray alloc]initWithObjects:@"Delhi",@"Mumbai",@"Chennai", nil];
    genderArray = [[NSArray alloc]initWithObjects:@"Male",@"Female",@"Transgender", nil];
    self.pickerView.hidden = YES;
    self.btnDoneOutlet.hidden = YES;



}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    [self.view endEditing:YES];
}

//Needed to prevent keyboard from opening
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    currentTextField = textField;
    if (textField == self.textFieldGenderOutlet) {
        currentArray = genderArray;
    }
    if (textField == self.textFieldCityOutlet) {
        currentArray = cityArray;
    }
    // do here everything you want
    NSLog(@"Pressed on TextField!");
    self.pickerView.hidden = NO;
    self.btnDoneOutlet.hidden = NO;

    [self.view endEditing:YES]; // Hide keyboard
    NSLog(@"****current array**** %@",currentArray);
    return NO;
}

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

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [currentArray count];

}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{

    [currentTextField setText:[currentArray objectAtIndex:row]];


}

-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [currentArray objectAtIndex:row];
}

- (IBAction)textFieldGenderAction:(id)sender {
    self.pickerView.hidden = NO;
    self.btnDoneOutlet.hidden = NO;

}

- (IBAction)btnDone:(id)sender {
    self.pickerView.hidden = YES;
    self.btnDoneOutlet.hidden = YES;
}

- (IBAction)textFieldCityAction:(id)sender {
}
@end

2 个答案:

答案 0 :(得分:1)

您需要重新加载选择器视图:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    currentTextField = textField;
    if (textField == self.textFieldGenderOutlet) {
        currentArray = genderArray;
    }
    if (textField == self.textFieldCityOutlet) {
        currentArray = cityArray;
    }
    // do here everything you want
    NSLog(@"Pressed on TextField!");
    self.pickerView.hidden = NO;
    self.btnDoneOutlet.hidden = NO;

    [self.thePicker reloadAllComponents];


    [self.view endEditing:YES]; // Hide keyboard
    NSLog(@"****current array**** %@",currentArray);
    return NO;
}

答案 1 :(得分:0)

currentArraytextFieldShouldBeginEditing中分配了值,但未在代码中的任何位置初始化。

只需在currentArray中初始化viewDidLoad,如下所示:

currentArray = [NSArray new];