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

Is there an efficient algorithm for segmentation of handwritten text?

c# algorithm image-processing ocr genetic-algorithm

I want to automatically divide an image of ancient handwritten text by lines (and by words in future).

If I make a 100% OpenGL-based user interface in Android or iOS, is it possible to embed a Google Map widget in it?

android ios android-layout opengl-es android-widget

I've never done such a thing before. The reason I ask is because I'm contemplating on making my own user interface using OpenGL so that it is cross platform on Android, iOS, etc. By doing so I will

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.