6

明確にするために、UIpickerview の設定時に最初に行の高さを設定する方法を尋ねているわけではありません。そのために pickerView:rowHeightForComponent を使用していることは知っています。

しかし、私が求めているのは、pickerView:rowHeightForComponent が変数値を返すようにするかどうかです。値は、UIpickerview の有効期間中に変化する可能性があります。たとえば、ボタンのクリックやデフォルト設定の変更に応じて変化します。

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

UIpickerview を解放して別の UIpickerview をセットアップし、iOS に pickerView:rowHeightForComponent を再度呼び出させることができると思いますが、これは不便で、状態情報の保存が必要になる場合があります。行の高さを動的に変更する別の簡単な方法はありますか? ありがとう!

周りを検索すると、Changing UIPickerView 行の高さ(行の高さを初めて設定する場合のみ) とHow to change the size of row in UIPickerView by button click? が見つかりました。これは、行の高さにキャッシュされた値を使用しているように見える rowSizeForComponent メソッドについて説明しています。

@RileyE が示唆するように、reloadAllComponents のテストとともに、行の高さを変更しようとするコードの一部を次に示します。

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);

コンソールに次の出力が表示されます。

2012-11-29 02:32:14.681 IP Address Calculator[6404:c07] 以前、scrollviewSpacing は 39
2012-11-29 02:32:18.913 IP Address Calculator[6404:c07] 現在 scrollviewSpacing は 22
2012-11-29 02:32:20.196 IP Address Calculator[6404:c07] rowsizeforcomponent の高さは 39.000000 2012-11-29 02:32:28.865 IP Address Calculator[6404:c07] rowsizeforcomponent の高さは 39.000000 2012-11-29 02:32:30.903 IP Address Calculator[6404:c07] rowsizeforcomponent の高さは 39.000000 です

MainViewController (UIpickerviewdelegate) には、

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

さらに、ここにブレークポイントを設定すると、UIPickerview が最初にセットアップされたときにのみ呼び出され、二度と呼び出されないことがわかります。

4

2 に答える 2

0

すべてのデリゲート メソッドが再度呼び出され、呼び出し時に更新されます。[yourPicker reloadAllComponents];

UIPickerViewUIPickerViewDelegateのドキュメントをご覧ください。特に、「ビュー ピッカーのリロード」セクションを確認してください。

于 2012-11-28T17:55:15.983 に答える