Как показать выбранное значение UIPickerView в соответствии с меткой
Я пытаюсь показать UIPickerView с выбранным значением в соответствии со значением метки в представлении.
Например, если значение метки равно 2 и когда я открываю окно выбора, я хочу, чтобы значение два было выбрано в окне выбора. Как бы это случилось?
Мой код:
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
//res is array
return [[res objectAtIndex:row]objectForKey:@"choice_name"];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
//choiceList is sting
self.choiceList = [NSString stringWithFormat:@"<r_PM act='closepos_choice' cl_choice='%d'/>", row];
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel *pickerLabel = (UILabel *)view;
if (pickerLabel == nil) {
CGRect frame = CGRectMake(0.0, 0.0, 300, 30);
pickerLabel = [[[UILabel alloc] initWithFrame:frame] autorelease];
[pickerLabel setTextAlignment:UITextAlignmentCenter];
[pickerLabel setBackgroundColor:[UIColor clearColor]];
[pickerLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:16.0]];
//EDITED CODE FOR C_X
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:lblOtomatikPozKap.text];
[f release];
NSInteger index = [res indexOfObject:myNumber];
if(index != NSNotFound ){
[self.pickerView selectRow:index inComponent:0 animated:NO];
}
//EDITED FOR AUSTIN
NSInteger indexOfItem = [res indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return [[obj objectForKey:@"choice_name"] isEqualToString:@"2"];
}];
if (indexOfItem != NSNotFound)
{
[self.pickerView selectRow:indexOfItem inComponent:1 animated:NO];
}
}
NSString *str = [NSString stringWithFormat:@"%d- %@", row, [[res objectAtIndex:row]objectForKey:@"choice_name"]];
[pickerLabel setText:str];
return pickerLabel;
}
//Not working at all
- (void)selectRow:(UIPickerView*)row inComponent:(NSInteger)component animated:(BOOL)animated
{}
2 ответа
Вы можете выбрать строку, вызвав этот метод на pickerview
selectRow:inComponent:animated
Редактировать:
Вы получаете строки от res
, сначала вы должны добавить строку метки в этот массив, чтобы вы могли иметь эту строку в pickerView
, После этого в viewWillAppear или любом другом методе, где вы хотите вызвать этот метод. Сначала получите индекс этой строки / объекта.
NSInteger index=[resindexOfObject:label.text];
Теперь выберите строку.
if(index != NSNotFound ){
[self.myPicker selectRow:index inComponent:0 animated:NO]
}
Во-первых, вы получите индекс значения, которое вы хотите выбрать из вашего источника данных (res
массив, в данном случае). Затем вы бы позвонили selectRow:inComponent:animated:
перед показом сборщика:
NSInteger indexOfItem = [res indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return [[obj objectForKey:@"choice_name"] isEqualToString:@"2"];
}];
if (indexOfItem != NSNotFound)
{
[self.pickerView selectRow:indexOfItem inComponent:1 animated:NO];
}
// Show picker here