Iphone 为什么不是每次视图出现时都调用UIPickerView widthForComponent委托方法?
我在iPhone屏幕上有两个控件——TableView和UIPickerView。当您在TableView中选择单个单元格时,您将进入另一个屏幕,在该屏幕上显示服装类型列表。从列表中选择单个服装项目将返回到第一个屏幕。根据您的选择,UIPickerView中的组件数量更改为1-4,并且每个组件都填充了相关数据 假设您的“衣服类型”列表中有三个项目,选中时,每个项目在UIPickerView中都应有一定数量的组件: 皮带-3个宽度为100、55、100的部件 胸罩-3个组件,宽度分别为55、55、55 其他-4个宽度为100、100、55、50的组件 场景1-一切都是它应该的样子 1.1-您选择皮带衣物项目,UIPickerView由3个组件绘制,每个组件中都有相应的皮带数据。组件宽度为100、55、100 1.2-选择其他衣物项目,UIPickerView由4个组件绘制,每个组件中都有相应的其他数据。组件宽度为100、100、55、50 1.3-选择胸罩服装项目,UIPickerView由3个组件绘制,每个组件中都有相应的胸罩数据。组件宽度为55、55、55 场景2-未重新绘制组件宽度 1.1-您选择皮带衣物项目,UIPickerView由3个组件绘制,每个组件中都有相应的皮带数据。组件宽度为100、55、100 1.2-选择胸罩服装项目,UIPickerView由3个组件绘制,每个组件中都有相应的胸罩数据。但是,组件宽度仍然是100、55、100,而不是55、55、55 1.3-选择其他衣物项目,UIPickerView由4个组件绘制,每个组件中都有相应的其他数据。组件宽度为100、100、55、50 1.2-选择胸罩服装项目,UIPickerView由3个组件绘制,每个组件中都有相应的胸罩数据。组件宽度现在正确-55、55、55 从单步执行代码来看,似乎只有在UIPickerView中的组件数量发生变化时才会调用UIPickerView widthForComponent委托方法 是否有任何方法可以强制每次启动此委托方法 更新-10.26.09 我正在使用以下代码调用[UIPickerView reloadAllComponents in the ViewWillAspect委托:Iphone 为什么不是每次视图出现时都调用UIPickerView widthForComponent委托方法?,iphone,delegates,uipickerview,Iphone,Delegates,Uipickerview,我在iPhone屏幕上有两个控件——TableView和UIPickerView。当您在TableView中选择单个单元格时,您将进入另一个屏幕,在该屏幕上显示服装类型列表。从列表中选择单个服装项目将返回到第一个屏幕。根据您的选择,UIPickerView中的组件数量更改为1-4,并且每个组件都填充了相关数据 假设您的“衣服类型”列表中有三个项目,选中时,每个项目在UIPickerView中都应有一定数量的组件: 皮带-3个宽度为100、55、100的部件 胸罩-3个组件,宽度分别为55、55、
-(void)viewWillAppear:(BOOL)animated {
...
self.PopulatePickerArrays; // Populate components based on selection
[sizePicker reloadAllComponents];
...
}
提前感谢。我不确定,但您可以尝试调用[pickerView reloadAllComponents];在您的视图中,将显示方法
NumberOfComponents方法返回currentNumberOfComponents我不确定,但您可以尝试调用[pickerView reloadAllComponents];在您的ViewWillExample方法中
NumberOfComponents方法返回currentNumberOfComponents结果表明,如果重置选择器的委托,则每次进行选择时都会重新绘制组件宽度。修改后的代码如下所示:
-(void)viewWillAppear:(BOOL)animated {
....
self.PopulatePickerArray; // Populate components based on selection
sizePicker.delegate = nil; // NEW CODE
sizePicker.delegate = self; // NEW CODE
[picker reloadAllComponents];
}
在此网页上找到信息-结果表明,如果重置选择器的委托,则每次进行选择时都会重新绘制组件宽度。修改后的代码如下所示:
-(void)viewWillAppear:(BOOL)animated {
....
self.PopulatePickerArray; // Populate components based on selection
sizePicker.delegate = nil; // NEW CODE
sizePicker.delegate = self; // NEW CODE
[picker reloadAllComponents];
}
在该网页上找到信息-实际上,仅使用setNeedsLayout也会起作用,可能会更干净一些
[picker reloadAllComponents];
[picker setNeedsLayout];
实际上,只使用setNeedsLayout也会起作用,可能会更干净一些
[picker reloadAllComponents];
[picker setNeedsLayout];
我已经这样做了,请参见上面的代码示例。widthForComponent委托方法仅在UIPickerView中的组件数更改时调用。嗯。我刚刚尝试通过按按钮来实现更改组件数,效果很好…OnBTNluComponent的代码在我的帖子中。我已经这样做了,请参见代码示例above、 widthForComponent委托方法仅在UIPickerView中的组件数量发生变化时调用。hmm。我刚刚尝试在按下按钮时实现组件数量的变化,效果很好…OnBTNPluComponent的代码在我的帖子中。这应该是答案,工作很好,不需要解决方法,这应该是swer,工作完美,无需解决方案,