我有一个ViewController与fallowing viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
model = [GlobalDataModel sharedDataModel];
programTypes = @[@"Gewichtsreduktion", @"Verdauungs-/Stoffwechselprobleme", @"Energielosigkeit, Müdigkeit",
@"Stress, Burn-out", @"Unruhe, Schlaflosigkeit", @"Immunsystem, Hautprobleme", @"Sport - Muskelaufbau", @"Sport - Ausdauersport", @"Sport - Leistungssport"];
int row = 8; //[model.infoDictionary[@"programmtyp"] intValue];
[programTypePicker selectRow:row inComponent:0 animated:NO];
}
和UIPickerView的这个委托方法:
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return programTypes.count;
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
forComponent:(NSInteger)component {
return programTypes[row];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
model.infoDictionary[@"programmtyp"] = [NSString stringWithFormat:@"%ld",(long)row];
}
问题是,在viewDidLoad中,当我设置row = 8时,它总是选择不是最后一行 - 而不是第二行(而不是“Sport - Leistungssport”它选择“Sport - Ausdauersport”)。当我使用小于8的行时,它将正常工作。
somone可以帮助我,我做错了什么? - 谢谢。
答案 0 :(得分:3)
这是iOS 6中的自动布局错误。我能解决的唯一解决方法是禁用autolayout或在viewDidAppear中设置选择器选择:而不是viewDidLoad或viewWillAppear:。
有关详细信息,请参阅以下内容: UIPickerView can't autoselect last row when compiled under Xcode 4.5.2 & iOS 6
答案 1 :(得分:0)
根据我的想法,
你的数组中有9个对象。
数组的索引为0到n-1(在您的情况下为0到8,而不是1到9)
选择正确的行,您没有设置正确的索引。
如果你想让它选择倒数第二个,即使数组中的字符串/对象数量不同,只需将其设置为
int row = [programTypes count]-2; //[programTypes count]-1 is the last row.
答案 2 :(得分:0)
在您的代码段中,变量programTypes.count将count返回为9,并将selectedRow设置为8,以便选择器选择最后一行。