UIPicker selectRow不工作 - 这段代码出了什么问题?

时间:2011-09-12 20:53:58

标签: ios uipickerview

我正在尝试为UIPickerView设置默认值。但是,无论我将它设置为哪个值,它总是默认为1.下面的方法加载选择器就好了,我可以选择它。那么,我做错了什么?这是代码。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    arrayNo = [[NSMutableArray alloc] init];
    [arrayNo addObject:@" 1 "];
    [arrayNo addObject:@" 2 "];
    [arrayNo addObject:@" 3 "];
    [arrayNo addObject:@" 4 "];
    [arrayNo addObject:@" 5 "];

    [pickerView selectRow:4 inComponent:0 animated:YES];
    mlabel.text= [arrayNo objectAtIndex:[pickerView selectedRowInComponent:0]];    

}

Picker的DataSource方法:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{

    mlabel.text = [arrayNo objectAtIndex:row];
    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];

    [f setNumberStyle:NSNumberFormatterDecimalStyle];

    NSNumber * myNumber = [f numberFromString:[arrayNo objectAtIndex:row]];

    [f release];

    prefs = [NSUserDefaults standardUserDefaults];

    NSInteger myInteger = [myNumber integerValue];


    // save level
    [prefs setInteger:myInteger forKey:@"myInt"];

    // saving it all
    [prefs synchronize];


}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
    return [arrayNo count];
}

8 个答案:

答案 0 :(得分:7)

如果我把它放在这个方法中,它会起作用:

-(void) viewWillAppear: (BOOL) animated

答案 1 :(得分:5)

在填充数组之后和尝试选择行之前,您可能需要调用reloadAllComponents。选择器可能还不知道你的新元素数量。

答案 2 :(得分:2)

执行以下步骤

  • 在选择器初始化之前加载数组..
  • 调用[pickerView selectRow:4 inComponent:0 animated:YES];
  • 调用[pickerView reloadAllComponents];

在最近的苹果发行说明中,苹果说:“在iOS 5.0中,UIPickerView不会发送其pickerView:didSelectRow:inComponent:委托消息,因为程序选择。”所以我们需要强行调用relaodAppComponents ..

确认其工作是否正确......

答案 3 :(得分:1)

这是因为你需要在viewdidload中设置数据源,否则如果你从storyboard中设置它,它将在viewWillAppear之后加载。

答案 4 :(得分:0)

  • 我们无法看到您如何为选择器设置数据源
  • 你在viewDidLoad中做了一个动画的selectRow(这个视图还没在屏幕上......)

你试过动画:不是吗?

答案 5 :(得分:0)

arrayNo做什么?是否用于填充UIPickerView?如果是,则在致电[pickerView reloadAllComponents]

之前,您必须selectRow:inComponent:animated:

答案 6 :(得分:0)

对我有用的是委派didSelectRow呼叫:

self.pickerView.delegate?.pickerView?(self.providerPickerView, didSelectRow: 0, inComponent: 0)

答案 7 :(得分:0)

您需要先调用reloadComponent来更新选择器

迅速

self.picker.reloadComponent(0)
self.picker.selectRow(arrayData.count - 1, inComponent: 0, animated: true)
相关问题