Warum wird die UIPickerView widthForComponent-Delegatmethode nicht jedes Mal aufgerufen, wenn die Ansicht angezeigt wird?

Ich habe zwei Steuerelemente auf einem iPhone-Bildschirm - eine TableView und eine UIPickerView. Wenn Sie die einzelne Zelle in der TableView auswählen, gelangen Sie zu einem anderen Bildschirm, in dem eine Liste der Kleidungsarten angezeigt wird. Durch Auswahl eines einzelnen Kleidungsstücks aus der Liste kehren Sie zum ersten Bildschirm zurück. Abhängig von Ihrer Auswahl wird die Anzahl der Komponenten in der UIPickerView geändert (1-4) und jede Komponente mit relevanten Daten gefüllt.

Angenommen, Sie haben drei Elemente in Ihrer Kleidungsartenliste und jedes Element sollte eine bestimmte Anzahl von Komponenten in der UIPickerView enthalten, wenn es ausgewählt ist:

Gürtel - 3 Teile mit Breiten von 100, 55, 100 Büstenhalter - 3 Teile mit Breiten von 55, 55, 55 Sonstige - 4 Teile mit Breiten von 100, 100, 55, 50

Szenario 1 - Alles ist so, wie es sein sollte

1.1 - Sie wählen das Kleidungsstück "Gürtel" und die UIPickerView wird mit 3 Komponenten mit den entsprechenden Gürteldaten in jeder Komponente gezeichnet. Die Bauteilbreiten betragen 100, 55, 100.

1.2 - Sie wählen das Kleidungsstück "Sonstige" aus und die UIPickerView wird mit 4 Komponenten mit den entsprechenden sonstigen Daten in jeder Komponente gezeichnet. Die Bauteilbreiten betragen 100, 100, 55, 50.

1.3 - Sie wählen das Kleidungsstück "Büstenhalter" und die UIPickerView wird mit 3 Komponenten mit den entsprechenden Büstenhalterdaten in jeder Komponente gezeichnet. Die Bauteilbreiten betragen 55, 55, 55.

Szenario 2 - Komponentenbreiten nicht neu gezeichnet

1.1 - Sie wählen das Kleidungsstück "Gürtel" und die UIPickerView wird mit 3 Komponenten mit den entsprechenden Gürteldaten in jeder Komponente gezeichnet. Die Bauteilbreiten betragen 100, 55, 100.

1.2 - Sie wählen das Kleidungsstück "Büstenhalter" und die UIPickerView wird mit 3 Komponenten mit den entsprechenden Büstenhalterdaten in jeder Komponente gezeichnet. Die Bauteilbreiten betragen jedoch immer noch 100, 55, 100, nicht 55, 55, 55.

1.3 - Sie wählen das Kleidungsstück "Sonstige" und die UIPickerView wird mit 4 Komponenten mit den entsprechenden sonstigen Daten in jeder Komponente gezeichnet. Die Bauteilbreiten betragen 100, 100, 55, 50.

1.2 - Sie wählen das Kleidungsstück "Büstenhalter" und die UIPickerView wird mit 3 Komponenten mit den entsprechenden Büstenhalterdaten in jeder Komponente gezeichnet. Die Bauteilbreiten sind nun korrekt - 55, 55, 55.

Nach dem Durchlaufen des Codes sieht es so aus, als würde die UIPickerView widthForComponent-Delegatmethode nur aufgerufen, wenn sich die Anzahl der Komponenten in der UIPickerView ändert.

Gibt es eine Möglichkeit, diese Delegatmethode jedes Mal zum Feuern zu zwingen?

Update - 26.10.09

Ich rufe [UIPickerView reloadAllComponents im viewWillAppear-Delegaten mit dem folgenden Code auf:

-(void)viewWillAppear:(BOOL)animated {

 ...

 self.PopulatePickerArrays; // Populate components based on selection
 [sizePicker reloadAllComponents];

 ...

}

Danke im Voraus.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage