how to change elements on UIpickerView pushing a button or pushing another button

I have an application, that in the main view, have 3 buttons, and the 2 firts buttons have to show an UIPickerView for a selection of event (one of them) and a selection of time (the second).

UIPickerViewDelegate only let me to implement the methods one time, so, how can I do for change the content of the UIPickerView.

Here is mi .m code:

    #import "Home_ViewController.h"

    @interface Home_ViewController ()

@end

@implementation Home_ViewController

@synthesize index,arrayHoras,arrayRutas,pickerView, rutaId, horas, botonHoras, botonRuta, hora;

- (IBAction)selectRuta:(id)sender {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    [self.view addSubview:pickerView];
    [UIView commitAnimations];
    [pickerView setHidden:NO];
}


- (IBAction)horasBoton:(id)sender {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    [self.view addSubview:pickerView];
    [UIView commitAnimations];
    [pickerView setHidden:NO];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    hora = 1;
    arrayRutas = [[NSMutableArray alloc] init];
    arrayHoras = [[NSMutableArray alloc] initWithObjects: @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"11", @"12", nil];

    sqlite3 *turutaDB;
    NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *databasePath = [[dirPath objectAtIndex:0] stringByAppendingPathComponent:@"turuta.db"];

    NSLog(@"path de la bbdd: %@",  databasePath);
    if(sqlite3_open([databasePath UTF8String], &turutaDB)==SQLITE_OK) {
        NSLog(@"2 Base de datos creada y abierta con exito");
    } else {
        NSLog(@"Ha fallado la apertura de la bbdd");
    }

    sqlite3_stmt *sentenciaRutas;
    NSString *querySQLrutas = @"SELECT id,nombre FROM rutas";

    if(sqlite3_prepare_v2(turutaDB, [querySQLrutas UTF8String], -1, &sentenciaRutas, NULL)==SQLITE_OK){
        NSLog(@"Consulta preparada ok");
    } else {
        NSLog(@"Consulta ha fallado al preparar: %s", sqlite3_errmsg(turutaDB));
    }


    while (sqlite3_step(sentenciaRutas) == SQLITE_ROW) {
        NSString *selectRutas = [[NSString alloc] initWithUTF8String:
                                 (const char *) sqlite3_column_text(sentenciaRutas, 1)];

        [arrayRutas addObject:selectRutas];


    }



    sqlite3_finalize(sentenciaRutas);

  //  [self.tabBarController.tabBar setHidden:YES];
    // Do any additional setup after loading the view, typically from a nib.
}

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

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

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

    if(!botonHoras.isTouchInside) {
        return [arrayHoras count];
    } else  {
        return [arrayRutas count];
    }

}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if(!botonHoras.isTouchInside) {
        return [arrayHoras objectAtIndex:row];
    } else  {
        return [arrayRutas objectAtIndex:row];
    }
}

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

    if (!botonHoras.isTouchInside) {
        horas= [[arrayHoras objectAtIndex:row] intValue];
        botonHoras.titleLabel.text = [NSString stringWithFormat:@"%d Horas", horas];
        [self.pickerView removeFromSuperview];

    } else {


        //GMSPolylineOptions *optionsLine = [GMSPolylineOptions options];
        GMSMutablePath *ruta = [GMSMutablePath path];


        sqlite3 *turutaDB;
        NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *databasePath = [[dirPath objectAtIndex:0] stringByAppendingPathComponent:@"turuta.db"];

        NSLog(@"path de la bbdd: %@",  databasePath);
        if(sqlite3_open([databasePath UTF8String], &turutaDB)==SQLITE_OK) {
            NSLog(@"2 Base de datos creada y abierta con exito");
        } else {
            NSLog(@"Ha fallado la apertura de la bbdd");
        }

        sqlite3_stmt *sentenciaId;
        NSString *querySQLid = [NSString stringWithFormat: @"SELECT id FROM rutas WHERE nombre = '%@'", [arrayRutas objectAtIndex:row]];
        if(sqlite3_prepare_v2(turutaDB, [querySQLid UTF8String], -1, &sentenciaId, NULL)==SQLITE_OK){
            NSLog(@"Consulta preparada ok");
        } else {
            NSLog(@"Consulta ha fallado al preparar: %s", sqlite3_errmsg(turutaDB));
        }


        while (sqlite3_step(sentenciaId) == SQLITE_ROW) {
            NSString *id = [[NSString alloc] initWithUTF8String:
                        (const char *) sqlite3_column_text(sentenciaId, 0)];

            rutaId = [id intValue];
            NSLog(@"%d",rutaId);


        }
        sqlite3_finalize(sentenciaId);

        sqlite3_stmt *sentenciaPolyLine;
        NSString *querySQLpoliline =[NSString stringWithFormat: @"SELECT coordx,coordy FROM config_ruta WHERE id_ruta = %d", rutaId];
        if(sqlite3_prepare_v2(turutaDB, [querySQLpoliline UTF8String], -1, &sentenciaPolyLine, NULL)==SQLITE_OK){
            NSLog(@"Consulta preparada ok");
        } else {
            NSLog(@"Consulta ha fallado al preparar: %s", sqlite3_errmsg(turutaDB));
        }


        while (sqlite3_step(sentenciaPolyLine) == SQLITE_ROW) {
            NSString *x = [[NSString alloc] initWithUTF8String:
                           (const char *) sqlite3_column_text(sentenciaPolyLine, 1)];

            NSString *y = [[NSString alloc] initWithUTF8String:
                           (const char *) sqlite3_column_text(sentenciaPolyLine, 0)];

            double coordx = [x doubleValue];
            double coordy = [y doubleValue];
            NSLog(@"%f | %f",coordy,coordx);


            [ruta addCoordinate:CLLocationCoordinate2DMake(coordy, coordx)];

        }



    sqlite3_finalize(sentenciaPolyLine);


        botonRuta.titleLabel.text = [arrayRutas objectAtIndex:row];

        [self.pickerView removeFromSuperview];
        [pickerView selectRow:0 inComponent:0 animated:YES];
    }

}




- (IBAction)rutaboton:(id)sender {

}

Some help please...

Answers


You need to set a flag indicating which button was pressed. Then you check that flag in each of the picker view data source and delegate methods.

Add an int property to your class. In the selectRuta: method set the property to 1. In the horasBoton: method, set the property to 2.

Then you picker view method look something like this (this assumes your property was named buttonType):

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if(self.buttonType == 1) {
        return [arrayRutas count];
    } else  {
        return [arrayHoras count];
    }
}

Need Your Help

How do I connect multiple sortable lists to each other in jQuery UI?

javascript jquery ajax jquery-ui

I'm new to jQuery, and I'm totally struggling with using jQuery UI's sortable. I'm trying to put together a page to facilitate grouping and ordering of items. My page has a list of groups, and each...

matching strings in a string array using processing

arrays string split match processing

I've been using the match function in Processing to match strings. I am however experiencing problems when trying to match strings from within an array of strings. The code below is an example of w...