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

Avoiding too specific dependencies

c linux build dependencies shared-libraries

I am using a shared C library on Linux that is distributed in binary form. The problem is that the dependencies are set to require exactly the versions available on the development machine. For exa...

JQuery slideshow no animation if selected

javascript jquery slideshow fade

I have a JQuery slideshow on this webpage http://www.2eenheid.de/cloud/.

Should Code Be in Unit Test or Integration Test

c# unit-testing testing integration-testing

First off, I am new at testing, so this may be a dumb question. I am currently creating unit tests for my classes. I have one property that depending on a nullable property will send off a new Co...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.