2012-11-28 16 views
6

明確にするために、私はUIpickerviewが設定されているときに最初に行の高さを1回設定する方法を尋ねていません。その目的のためにpickerView:rowHeightForComponentを使用することは知っています。UIpickerviewの行の高さを動的に変更するにはどうすればよいですか?

しかし、pickerView:rowHeightForComponentを使用して、値がUIpickerviewの存続期間中に変更できる、たとえばボタンのクリックやデフォルトの変更に対する返信が必要な場合はどうすればいいですか?設定します。

残念ながら、pickerView:rowHeightForComponentは、iOSがUIpickerviewを設定しているときに最初に1回だけ呼び出されることがわかりました。その後、pickerView:rowHeightForComponentを再度呼び出すことはありません。そのため、pickerView:rowHeightForComponentが再び呼び出された場合に返される値の変更を受け取ることはできません。

iOSでpickerView:rowHeightForComponentをもう一度呼び出すようにUIpickerviewを解放して別の設定を行うこともできますが、これは不都合な場合があり、状態情報の保存が必要な場合があります。行の高さを動的に変更する別の簡単な方法はありますか?ありがとう!

私はChanging UIPickerView row height(これは行の高さの最初の設定のみです)とHow to change the size of row in UIPickerView by button click?を見つけました。これは行の高さにキャッシュされた値を使用するように見えるrowSizeForComponentメソッドを示しています。ここ

は一緒に試験reloadAllComponentsと、行の高さを変更しようとするコードの一部です:

:2012 @RileyEによって示唆されるように、コンソール上の次の出力を与える

NSLog(@"before, scrollviewSpacing is %d", self.mainViewController.IACscrollviewSpacing); 
if (0.0 != fromDefaultsScrollviewSpacing) { 
    self.mainViewController.IACscrollviewSpacing = (UInt8) round (60.0 - fromDefaultsScrollviewSpacing); 
} 
NSLog(@"now scrollviewSpacing is %d", self.mainViewController.IACscrollviewSpacing); 
NSLog(@"rowsizeforcomponent height is %f", [self.mainViewController.PickIPAddress rowSizeForComponent:1].height); 
[self.mainViewController.PickIPAddress reloadAllComponents]; 
NSLog(@"rowsizeforcomponent height is %f", [self.mainViewController.PickIPAddress rowSizeForComponent:1].height); 
[self.mainViewController.PickIPAddress reloadComponent:1]; 
NSLog(@"rowsizeforcomponent height is %f", [self.mainViewController.PickIPAddress rowSizeForComponent:1].height); 

-11-29 02:32:14.681 IPアドレス電卓[6404:c07] before、scrollviewSpacing is 39
2012-11-29 02:32:18.913 IPアドレス計算ツール[6404:c07] now scrollviewSpacingは22
2012- 11- 29 02:32:20.196 IPアドレス計算ツール[6404:c07] rowsizeforコンポーネントの高さは39.000000 2012-11-29 02:32:28.865 IPアドレス計算ツール[6404:c07] rowsizeforコンポーネントの高さは39.000000 2012-11-29 02:32 :30.903 IPアドレス電卓[6404:C07] rowsizeforcomponentの高さがある

と(UIpickerviewdelegateある)MainViewController、私は

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { 
return self.IACscrollviewSpacing; } 

はさらに、私はここにブレークポイントを設定している、と私は見るで39.000000 UIPickerviewが最初に設定されているときにのみ呼び出され、再度は呼び出されません。

+0

ピッカービューで 'reloadComponent:'を呼び出すと 'rowHeightForComponent:'が再び呼び出されると言っていますか? – rmaddy

+0

私は、reloadAllComponents:は私には問題のrowHeightForComponent:をもう一度呼び出さないと言っています。そうであれば、行の高さに使用する新しい値を選択します。 – auspicious99

+0

申し訳ありませんが、私はタイプミスがありました。私は "呼ばれていない"という意味で、 "呼ばれていない"という意味です。あなたは今それを確認しました。これは予期せぬことです。 – rmaddy

答えて

0

あなたはUIPickerViewUIPickerViewDelegateドキュメントをチェックアウト[yourPicker reloadAllComponents];

を呼び出すと、すべてのデリゲートメソッドが再び呼び出され、更新されています。特に、「ビューピッカーの再読み込み」のセクションを確認してください。

+0

質問をもう一度読む。それはテーブルビューではない。 – rmaddy

+0

ありがとうございますが、これはUIpickerviewであり、UItableviewではありません。 reloadDataメソッドはありません。 reloadAllComponentsまたはreloadComponent:がありますが、これらはデータを再度読み取るだけです(UIpickerviewdatasourceプロトコルメソッド)、UIpickerviewDelegateプロトコルメソッド(少なくともpickerView:rowHeightForComponentではなく)を呼び出さないでください。 – auspicious99

+0

@ auspicious99よろしいですか?さて、私は私の質問を更新しました。 – RileyE

0

UIPickerViewが動的に行の高さを変更できるかどうかわかりません。

しかし、私はピッカービュー名DLPickerViewを実装しました。別の行に異なる高さを返すことができます。理論的には、それはまた、生涯を通じて行の高さを変更することができます

関連する問題