【发布时间】:2011-08-31 02:56:14
【问题描述】:
我在 Xcode 4.02 中使用 Interface Builder 在一个视图中添加了两个 UIPickerView。它们连接到相同的委托和数据源(UIViewController)。在我的 .h 文件中,我还声明了 UIPickerViews 并将它们连接为参考插座,就像在许多示例中一样。 在 viewForRow 中,我使用 UILabel 的相同 NSMutable 数据数组来返回适当的值(该数组填充在 viewDidLoad 中)。
但是,我发现两个 UIPickerViews 中都没有同时出现 Label。例如,当应用程序启动时,每个 UIPickerView 应该显示元素 0、1 和 2。每个 UIPickerView 都会调用 3 次 viewForRow,但只有调用 viewForRow 第二个的视图才会显示前 3 行。另一个 UIPickerView 是空白的。如果我将第一个视图向下滚动到第 6 个元素,然后返回第一个元素,则该视图将显示前 3 个元素,但第二个视图(确实显示前 3 行的那个)现在什么也不显示。具体来说,两个 UIPickerView 中不会同时出现数据数组元素。
这是预期的吗?每个 UIPickerView 是否应该有自己的支持数组 - 如果您正在使用它们?所有这些返回的视图不都只是指针吗?就好像每个数组元素在任何时候最多只能显示(指向)一次。
如果我使用两个单独的数据数组,那么似乎没有问题。但这确实意味着额外的内存和额外的编码。
注意:在 viewForRow 我有设置标签大小的代码:
UILabel *xx = (UILabel *)[self.array1 objectAtIndex:row];
CGSize rowSize = [thePickerView rowSizeForComponent:component];
CGRect labelRect = CGRectMake (0, 0, rowSize.width, rowSize.height);
[xx setFrame:labelRect];
即使后面的行显示为空白,此处设置的值也不会改变。
【问题讨论】:
标签: ios objective-c arrays uipickerview