如何在整个生命周期内动态更改UIpickerview的行高?

时间:2012-11-28 17:20:41

标签: ios uipickerview

只是为了澄清一下,在设置UIpickerview时,我不是问如何在开头设置一次行高。我知道你为此目的使用了pickerView:rowHeightForComponent。

但是,我要问的是,我是否希望pickerView:rowHeightForComponent返回一个变量值,其中值可以在UIpickerview的生命周期内更改,例如,响应单击按钮或更改默认设置

我发现,不幸的是,当iOS设置UIpickerview时,pickerView:rowHeightForComponent只在一开始被调用一次。之后,它再也不会调用pickerView:rowHeightForComponent,因此无法获取pickerView的值的变化:如果只是再次调用它,rowHeightForComponent将返回。

我想我可以发布UIpickerview并设置另一个,强制iOS再次调用pickerView:rowHeightForComponent,但这可能不方便,可能需要保存状态信息。还有另一种更简单的方法来动态改变行高吗?谢谢!

搜索周围,我发现Changing UIPickerView row height(这只是第一次设置行高)和How to change the size of row in UIPickerView by button click?,它讨论了rowSizeForComponent方法,该方法似乎只使用缓存值行高。

以下是尝试更改行高的代码部分,以及测试reloadAllComponents:正如@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);

在控制台上提供以下输出:

  

2012-11-29 02:32:14.681 IP地址计算器[6404:c07]之前,scrollviewSpacing为39
  2012-11-29 02:32:18.913 IP地址计算器[6404:c07]现在scrollviewSpacing是22
  2012-11-29 02:32:20.196 IP地址计算器[6404:c07] rowsizeforcomponent height为39.000000   2012-11-29 02:32:28.865 IP地址计算器[6404:c07] rowsizeforcomponent height为39.000000   2012-11-29 02:32:30.903 IP地址计算器[6404:c07] rowsizeforcomponent height为39.000000

并且在MainViewController(这是UIpickerviewdelegate)中,我有

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

此外,我在这里设置了一个断点,我发现只有在最初设置UIPickerview时才会调用它,而且不会再次调用。

2 个答案:

答案 0 :(得分:0)

当您致电[yourPicker reloadAllComponents];

时,会再次调用所有委托方法并进行更新

查看UIPickerViewUIPickerViewDelegate文档。请查看“重新加载视图选择器”部分,尤其是。

答案 1 :(得分:0)

我不确定UIPickerView是否可以动态更改行高。

但我确实实现了一个选择器视图名称DLPickerView。您可以为不同的行返回不同的高度。从理论上讲,它也可以在整个生命周期内改变行高