Question

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...

Was it helpful?

Solution

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];
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top