2012-04-26 17 views
1

私はこの方法でそれを実行しようとしました:ボタンがクリックされたときにreloadAllComponents:を呼ぶが、それはドキュメントからrowHeightForComponent:ボタンをクリックしてUIPickerViewの行のサイズを変更する方法は?

+0

一つの方法は、 'self.pickerView.delegate =自己ボタンセレクタでredifineデリゲートとデータソースをある' が、私は知らない、それは正常です:) – eXhausted

答えて

1

を呼び出すdoesntの、それはreloadAllComponents:のように見えるだけのコンポーネント内に新しいデータのデリゲートを呼び出しますが、おそらくありませんサイズを尋ねる。

代わりに、私は各コ​​ンポーネントにrowSizeForComponent:を呼び出すことを試みます。このメソッドのドキュメントでは、「戻り値:指定されたコンポーネントの行のサイズ。これは、コンポーネント内の行として使用される最大の文字列またはビューを表示するのに必要なサイズです。このプロパティは、pickerView:widthForComponent:およびpickerView:rowHeightForComponent:delegateメソッドを呼び出してキャッシュします。デフォルト値は(0、0)です。

あなたのUIPickerViewDelegateでは、pickerView:widthForComponent:pickerView:rowHeightForComponent:の両方を実装します。 rowHeightForComponent:

+0

私がいることを意味します行のサイズを変更してから、PickerViewと同じビューにあるボタンをクリックする必要があります。 – eXhausted

+0

ボタンをクリックしたときに起動するメソッドを持つと、そのメソッド内で各コンポーネントのrowSizeForComponentを呼び出すことで、それを実行できますか?あなたが歩くためのコンポーネントの配列を持っていると仮定... –

0

あなたはUIpickerviewを解放しpickerViewで適切な戻り値を持つ別のものを作成する必要があります

これは、痛みのように思えるが、私は別のソリューションのぶっきらぼうを考えることはできません。

残念ながら、ドキュメントのように、「pickerビューはpickerView:widthForComponent:およびpickerView:rowHeightForComponent:delegateメソッドを呼び出すことによってこのプロパティの値をフェッチし、キャッシュそれ。"したがって、rowSizeForComponentを呼び出すと、pickerView:rowHeightForComponent:を呼び出すのではなく、キャッシュされた値のみが提供され、新しい値が取得されます。

1

@auspicious99のような新しいセルの高さを設定するためにpickerViewを解放する必要はありません。 は、代わりにあなたがこのようなreloadAllComponentsをトリガーするたびに、デリゲートやデータソースを設定します。

pickerView.delegate = self; //or pickerView.dataSource = self; 
[pickerView reloadAllComponents]; 

reloadAllComponents方法はrowHeightForComponentメソッドをトリガしない理由それは本当に奇妙だが、これはトリックの上に使用して、有効な回避策であることをように見えます。

希望します。 `` self.pickerView.dataSource =自己;

関連する問題