如何通过按钮单击更改UIPickerView中的行大小?

时间:2012-04-26 09:59:50

标签: objective-c ios uipickerview

我尝试这样做:点击按钮时调用reloadAllComponents:但不调用rowHeightForComponent:

3 个答案:

答案 0 :(得分:1)

从文档中看,reloadAllComponents:只是调用组件内部新数据的委托,但可能不会要求大小。

相反,我会尝试在每个组件上调用rowSizeForComponent:。在这个方法的文档中,它说:“返回:给定组件中行的大小。这通常是显示组件中用作行的最大字符串或视图所需的大小。选择器视图获取的值这个属性通过调用pickerView:widthForComponent:和pickerView:rowHeightForComponent:委托方法,并缓存它。默认值为(0,0)。“

然后,在您的UIPickerViewDelegate中,我将同时实现pickerView:widthForComponent:pickerView:rowHeightForComponent:

答案 1 :(得分:1)

您无需释放pickerView来设置新建的单元格高度,例如@auspicious99。 而是在每次触发reloadAllComponents时设置委托或dataSource,如下所示:

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

为什么reloadAllComponents方法不会触发rowHeightForComponent方法,这真的很奇怪,但这似乎是使用上述技巧的有效解决方法。

希望它有所帮助。

答案 2 :(得分:0)

您可能需要发布UIpickerview并在pickerView中创建另一个具有相应返回值的视图:rowHeightForComponent:

这似乎很痛苦,但我无法想到另一种解决办法。

不幸的是,调用rowSizeForComponent似乎无济于事,因为正如文档所说,“选择器视图通过调用pickerView:widthForComponent:和pickerView:rowHeightForComponent:委托方法来获取此属性的值,并缓存它“。因此,调用rowSizeForComponent只提供缓存值,而不是调用pickerView:rowHeightForComponent:来获取新值。