我正在尝试为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];
}
答案 0 :(得分:7)
如果我把它放在这个方法中,它会起作用:
-(void) viewWillAppear: (BOOL) animated
答案 1 :(得分:5)
在填充数组之后和尝试选择行之前,您可能需要调用reloadAllComponents
。选择器可能还不知道你的新元素数量。
答案 2 :(得分:2)
执行以下步骤
在最近的苹果发行说明中,苹果说:“在iOS 5.0中,UIPickerView不会发送其pickerView:didSelectRow:inComponent:委托消息,因为程序选择。”所以我们需要强行调用relaodAppComponents ..
确认其工作是否正确......
答案 3 :(得分:1)
这是因为你需要在viewdidload中设置数据源,否则如果你从storyboard中设置它,它将在viewWillAppear之后加载。
答案 4 :(得分:0)
你试过动画:不是吗?
答案 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)