Search code examples
objective-ciosuitextviewuipickerview

Adding a UI Picker to a UITextView


I'm trying to add a UIPicker to a UITextView when it is selected to choose an age. I found a previous thread and trued to implement the code but I can't get it to work properly. When I build the program the picker shows up, but there are no values in it. Any ideas as to what I'm doing wrong? Also, I'm getting two yellow errors here saying "Assigning to 'id' from incompatible type 'ViewController *const __strong" here:

pickerView.delegate = self;
pickerView.dataSource = self;

Thank you.

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextField *ageTextField;

@end

@implementation ViewController
@synthesize ageTextField;

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

    UIPickerView *pickerView =[[UIPickerView alloc]init];
    pickerView.delegate = self;
    pickerView.dataSource = self;
    pickerView.showsSelectionIndicator=YES;
    ageTextField.inputView=pickerView;
}

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

    NSMutableArray *ageArray = [[NSMutableArray alloc]init];

    [ageArray addObject:@"1"];
    [ageArray addObject:@"2"];
    [ageArray addObject:@"3"];
    [ageArray addObject:@"4"];

    ageTextField.text=[ageArray objectAtIndex:row];
}

Solution

  • @interface ViewController () <UIPickerViewDataSource, UIPickerViewDelegate>
    
    @property (strong, nonatomic) UIPickerView *pickerView;
    @property (strong, nonatomic) NSArray *pickerElements;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        self.pickerView = [[UIPickerView alloc] init];
        self.pickerView.delegate = self;
        self.pickerView.dataSource = self;
        self.pickerView.showsSelectionIndicator = YES;
        self.ageTextField.inputView = self.pickerView;
    
        self.pickerElements = @[@"text1", @"text2", @"text3", @"text4"];
        [self pickerView:self.pickerView
            didSelectRow:0
             inComponent:0];
    }
    
    - (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    {
        return 1;
    }
    
    - (int)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    {
         return [self.pickerElements count];
    }
    
    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
    {
        return [self.pickerElements objectAtIndex:row];
    }
    
    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
        self.ageTextField.text = [self.pickerElements objectAtIndex:row];
    }
    
    @end