2014-01-14 2 views
2

Я пытаюсь показать UIPickerView с выбранным значением в соответствии со значением метки в представлении.Как показать выбранное значение UIPickerView в соответствии с меткой

Например, если значение метки равно 2, и когда я открываю pickerView, я хочу, чтобы в сборщике было выбрано значение два. Как это произойдет?

Мой код:

-(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 
{} 

ответ

1

Вы можете выбрать строку, вызвав этот метод pickerviewselectRow:inComponent:animated: Edit:

Вы получаете строки из res, сначала нужно добавить строку метки к этому массиву, чтобы вы могли иметь эту строку в pickerView. После этого в viewWillAppear или любом другом методе, где вы хотите вызвать этот метод. Сначала получите индекс этого sring/object.

NSInteger index=[resindexOfObject:label.text]; 

Теперь выберите строку.

if(index != NSNotFound){ 
[self.myPicker selectRow:index inComponent:0 animated:NO] 
} 
+0

Привет, C_X, не могли бы вы дать мне более подробную информацию? Благодарю. – Cem

+0

Я проверил код выше, он не работает. Не могли бы помочь? – Cem

+0

Как вы это протестировали, добавили ли вы текст меток в массив и поместите ур код в правильное место? будет лучше, если вы покажете свой код ... –

1

Во-первых, вы получите индекс значение, которое вы хотите выбрать из источника данных (в 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 
+0

Привет, austin, есть ли другой способ вместо того, чтобы показывать сборщик ниже в соответствии с вашим кодом? Благодарю. – Cem

+0

Вам не нужно отображать сборщик, где комментарий '// Show picker here'; это было всего лишь предложение. Вы можете сделать это в любой момент после того, как вы создали сборщик, даже после того, как вы его показали. – Austin

+0

Прошу прощения, что он не работает. Не могли бы вы мне помочь, пожалуйста? – Cem

Смежные вопросы