bil*_*aya 1 iphone delegates uipickerview
我在iPhone屏幕上有两个控件 - 一个TableView和一个UIPickerView.当您在TableView中选择单个单元格时,您将进入另一个显示服装类型列表的屏幕.从列表中选择单个服装项将带您返回第一个屏幕.根据您的选择,更改UIPickerView中的组件数(1-4),并使用相关数据填充每个组件.
假设您在服装类型列表中有三个项目,并且每个项目在选择时应在UIPickerView中具有一定数量的组件:
皮带 - 3个组件,宽度为100,55,100胸罩 - 3个组件,宽度为55,55,55其他 - 4个组件,宽度为100,100,55,50
场景#1 - 一切都应该如此
1.1 - 您选择"Belt"服装项目,UIPickerView使用3个组件绘制,每个组件中都有相应的Belt数据.组件宽度为100,55,100.
1.2 - 您选择"其他"服装项目,UIPickerView使用4个组件绘制,每个组件中包含相应的其他数据.组件宽度为100,100,55,50.
1.3 - 您选择"Brassiere"服装项目,UIPickerView使用3个组件绘制,每个组件中都有相应的Brassiere数据.组件宽度为55,55,55.
场景#2 - 不重新绘制组件宽度
1.1 - 您选择"Belt"服装项目,UIPickerView使用3个组件绘制,每个组件中都有相应的Belt数据.组件宽度为100,55,100.
1.2 - 您选择"Brassiere"服装项目,UIPickerView使用3个组件绘制,每个组件中都有相应的Brassiere数据.但是,组件宽度仍然是100,55,100,而不是55,55,55.
1.3 - 选择"其他"服装项目,UIPickerView使用4个组件绘制,每个组件中包含相应的其他数据.组件宽度为100,100,55,50.
1.2 - 您选择"Brassiere"服装项目,UIPickerView使用3个组件绘制,每个组件中都有相应的Brassiere数据.组件宽度现在正确 - 55,55,55.
从单步执行代码看起来,只有当UIPickerView中的组件数发生变化时,才会调用UIPickerView的widthForComponent委托方法.
有没有办法强制这种委托方法每次都开火?
更新 - 10.26.09
我使用以下代码在viewWillAppear委托中调用[UIPickerView reloadAllComponents:
-(void)viewWillAppear:(BOOL)animated {
...
self.PopulatePickerArrays; // Populate components based on selection
[sizePicker reloadAllComponents];
...
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
事实证明,如果重置选择器的委托,则每次进行选择时都会重新绘制组件宽度.修改后的代码如下所示:
-(void)viewWillAppear:(BOOL)animated {
....
self.PopulatePickerArray; // Populate components based on selection
sizePicker.delegate = nil; // NEW CODE
sizePicker.delegate = self; // NEW CODE
[picker reloadAllComponents];
}
Run Code Online (Sandbox Code Playgroud)
在此网页上找到信息 - Changing-Width-UIPicker-持续
实际上,只使用setNeedsLayout也可以工作,可能会更清洁.
[picker reloadAllComponents];
[picker setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3099 次 |
| 最近记录: |