Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么不是每次视图出现时都调用UIPickerView widthForComponent委托方法?_Iphone_Delegates_Uipickerview - Fatal编程技术网

Iphone 为什么不是每次视图出现时都调用UIPickerView widthForComponent委托方法?

Iphone 为什么不是每次视图出现时都调用UIPickerView widthForComponent委托方法?,iphone,delegates,uipickerview,Iphone,Delegates,Uipickerview,我在iPhone屏幕上有两个控件——TableView和UIPickerView。当您在TableView中选择单个单元格时,您将进入另一个屏幕,在该屏幕上显示服装类型列表。从列表中选择单个服装项目将返回到第一个屏幕。根据您的选择,UIPickerView中的组件数量更改为1-4,并且每个组件都填充了相关数据 假设您的“衣服类型”列表中有三个项目,选中时,每个项目在UIPickerView中都应有一定数量的组件: 皮带-3个宽度为100、55、100的部件 胸罩-3个组件,宽度分别为55、55、

我在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委托:

-(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,工作完美,无需解决方案,