Domanda

Sto cercando di imparare ad usare l'UIPickerView, e io non so perché mio avviso avviso stampa sempre il primo elemento della matrice (selettore), contro qualsiasi altra cosa. Ho un premere il pulsante definito per il selettore come:

- (IBAction)buttonPressed {
    NSInteger row = [myPicker selectedRowInComponent:0];
    NSString *s = [myPickerData objectAtIndex:row];
    NSLog(@"%@", s);
    NSString *title = [[NSString alloc] initWithFormat:@"You selected, %@", s];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                                                    message:@"Message"
                                                   delegate:nil
                                          cancelButtonTitle:@"ok"
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];
    [title release];
}

il mio allineamento definito come:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *array = [[NSArray alloc] initWithObjects:@"0", @"1", @"2", nil];
    self.myPickerData = array;
    [array release];
}

annoto le uscite quando il selettore è cambiato, ed i valori si ottiene modificato in 0, 1, 2, di conseguenza.

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSLog(@"%@", [myPickerData objectAtIndex:row]);
}

Ma la vista di allarme non funziona mai. Quindi sono sicuro che cosa sto facendo male qui.

È stato utile?

Soluzione

Ho il sospetto che vi manca un collegamento nel file pennino, in particolare dalla presa myPicker all'istanza UIPickerView. Se così fosse, myPicker sarebbe pari a zero, e quindi la linea

NSInteger row = [myPicker selectedRowInComponent:0];

sarebbe sempre impostato fila a 0, il che spiega il motivo per cui si è sempre visualizzando il primo elemento nella matrice.

Oltre a controllare il vostro file nib, è anche possibile confermare questa impostazione di un punto di interruzione nel metodo buttonPressed e controllo per vedere se myPicker è pari a zero.

fare hanno un collegamento dalla presa delegato / dataSource del UIPickerView alla classe di controllo, che è il motivo per cui i vostri metodi delegato sono chiamati. Ma è necessaria una connessione nella direzione opposta per il metodo pulsante per funzionare correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top