Domanda

Ho un UIPickerView, in esso del delegato sto cercando di personalizzare la vista per una riga. Sto utilizzando il 3.1 SDK.

Quindi, nel delegato ho:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
//    view.backgroundColor = [UIColor redColor];
    return view;
}

Dalla documentazione di Apple: Se la vista precedentemente utilizzato (parametro vista) è adeguata, che ritorno. Se si restituisce una visione diversa, la vista precedentemente utilizzato viene rilasciato. La vista raccoglitrice centra la visualizzazione restituito nel rettangolo per riga.

Quando eseguo questo, il mio controllo UIPickerView non ha nessun articolo in esso, e dopo un breve periodo si blocca. Quando rimuovo questo particolare metodo (che è opzionale per il delegato), posso vedere le etichette ho impostato tramite il metodo titleForRow, e andrà in crash non è più.

Sono abbastanza nuovo per il cacao (e cacao-touch), non sono sicuro che la cosa view.backgroundColor funzionerà, ma anche quando si ritorna la vecchia visione non modificato (che devo fare in ogni caso per la maggior parte le righe) si blocca il mio app.

Sto facendo qualcosa di sbagliato?

È stato utile?

Soluzione

Si, si implementa o –pickerView:titleForRow:forComponent: o –pickerView:viewForRow:forComponent:reusingView:, ma non entrambi. Quello che sta accadendo è che non è chiamare il tuo –pickerView:titleForRow:forComponent: perché sta usando il vostro –pickerView:viewForRow:forComponent:reusingView:. Si restituisce il parametro reusingView:, ma che è nil la prima volta, perché non c'era nessun "vista precedentemente utilizzato" per quella riga.

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