Ios 为同一视图控制器目标C中的多个UIPickerViews设置唯一默认值

Ios 为同一视图控制器目标C中的多个UIPickerViews设置唯一默认值,ios,objective-c,uipickerview,Ios,Objective C,Uipickerview,我有一个带有两个不同UIPickerViews的视图控制器。第一个是包含七个名称的。第二个是从1到100的数字(字符串)列表。我希望默认值是列表中的最后一个数字 我使用在viewDidLoad中调用的以下方法设置了第一个UIPickerView的默认值 [self.namePicker selectRow:2 inComponent:0 animated:YES]; 这很好,当我运行代码时,我的名称选择器显示第三个元素 但是,以下方法调用对于我的第二个UIPickerView(也在viewDi

我有一个带有两个不同UIPickerViews的视图控制器。第一个是包含七个名称的。第二个是从1到100的数字(字符串)列表。我希望默认值是列表中的最后一个数字

我使用在viewDidLoad中调用的以下方法设置了第一个UIPickerView的默认值

[self.namePicker selectRow:2 inComponent:0 animated:YES];
这很好,当我运行代码时,我的名称选择器显示第三个元素

但是,以下方法调用对于我的第二个UIPickerView(也在viewDidLoad中调用)不起作用


运行时没有错误,numberPicker每次都以默认值1(第一个元素)出现。

问题可能是您的UIPickerView数据源和委托方法没有区分这两个UIPickerView。一种处理方法是在InterfaceBuilder中为它们提供单独的标记,然后在委托和数据源方法中使用if和/或switch语句:

#define kNamesPicker            0     // tag assigned in IB
#define kNumberPicker           1     // tag assigned in IB
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

if (pickerView.tag == kNamesPicker) {
}
else if (pickerView.tag == kNumberPicker) {
}

一旦对委托和数据源方法进行了排序,将值分配给选择器应该可以正常工作。

您确定在进行此调用时,
self.numberPicker
不是
nil
吗?不,我只是检查了它。不是零。它是一个UIPickerView对象。另一件事是,当我将方法更改为selectRow:1而不是99时,它会工作,并将默认值设置为第二个元素。它只是不适用于99等更高的数字。有关该问题的一些附加信息是,该方法[self.numberPicker selectRow:5 inComponent:0 animated:YES];工作完美。但是使用selectRow:6或6以外的任何元素的相同方法会恢复到第一个元素。谢谢您的回复。我使用标记来区分委托方法中带有if语句的两个选择器视图。您是否检查了出口和操作是否唯一?使用“复制/粘贴”可以复制这些内容,并导致多个连接。是的,我检查了这些内容,所有的输出/操作似乎都是唯一和正确的。很明显,您试图设置numberPicker的尝试以某种方式被路由到您的姓名选择器。因此,也要确保在情节提要编辑器中正确设置了标记。然后,您需要确定代码中绝对没有名称选择器和数字选择器的混淆。仔细检查这两个实例,并再次检查它们是否在任何地方都没有切换。也许把代码贴在这里,解决了!问题在于,序列图像板编辑器中的标记都设置为0。我没有意识到我需要在故事板中设置标记。此外,我认为在以编程方式声明时可能会覆盖它。非常感谢。
#define kNamesPicker            0     // tag assigned in IB
#define kNumberPicker           1     // tag assigned in IB
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

if (pickerView.tag == kNamesPicker) {
}
else if (pickerView.tag == kNumberPicker) {
}