2014-01-14 2 views
0

Я использую UIPickerView в своем примере приложения, и у меня есть эта проблема, что он не перезагружает данные, кроме первой строки. Ive фактически закодирован, чтобы назначить первую строку сборщика независимо, но другие строки загружаются массивом. Значения UIPickerView должны перезаряжаться каждый раз, когда пользователь нажимает кнопку, но кроме первой строки ни одно из значений не изменяется, поскольку я не могу понять, где я ошибаюсь. Ниже мой кодUIPickerView Не получается перезагрузить

//PickerView Code.... 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
if (pickerView.tag == 1) { 
    return 1; 
} 
else if (pickerView.tag == 2) 
{ 
    return 1; 
} 
return 0; 
} 
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
if (pickerView.tag == 1) { 
    return [self.CityList count]; 
} 
else 
{ 
    return [self.KmArray count]; 
} 
return 0; 
    } 


-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
return [self.CityList objectAtIndex:row]; 
} 

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
    { 
if (pickerView.tag == 1) { 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 44)]; 
    // label.backgroundColor = [UIColor grayColor]; 
    label.textColor = [UIColor whiteColor]; 
    label.font = [UIFont fontWithName:@"HelveticaNeue" size:20]; 
    label.textAlignment = NSTextAlignmentCenter; 
    label.text = self.CityList[row]; 
    return label; 
} 
else if (pickerView.tag == 2) 
{ 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 44)]; 
    // label.backgroundColor = [UIColor grayColor]; 
    label.textColor = [UIColor whiteColor]; 
    label.font = [UIFont fontWithName:@"HelveticaNeue" size:20]; 
    label.textAlignment = NSTextAlignmentCenter; 
    if (row == 0) { 
     if ([_currentCity isEqual:@"Chennai"]) 
     { 
      __weak NSString *lbl1 = [NSString stringWithFormat:@"1.8 Km"]; 
      lbl1 = [lbl1 stringByAppendingString:@"    "]; 
      lbl1 = [lbl1 stringByAppendingString:@"25.00"]; 
      label.text = lbl1; 
      return label; 
     } 
     else if ([_currentCity isEqual:@"Banglore"]) 
     { 
      __weak NSString *lbl1 = [NSString stringWithFormat:@"1.9 Km"]; 
      lbl1 = [lbl1 stringByAppendingString:@"    "]; 
      lbl1 = [lbl1 stringByAppendingString:@"25.00"]; 
      label.text = lbl1; 
      return label; 
     } 
     else if ([_currentCity isEqual:@"Delhi"]) 
     { 
      __weak NSString *lbl1 = [NSString stringWithFormat:@"2.0 Km"]; 
      lbl1 = [lbl1 stringByAppendingString:@"    "]; 
      lbl1 = [lbl1 stringByAppendingString:@"25.00"]; 
      label.text = lbl1; 
      return label; 
     } 
     else if ([_currentCity isEqual:@"Mumbai"]) 
     { 
      __weak NSString *lbl1 = [NSString stringWithFormat:@"1.5 Km"]; 
      lbl1 = [lbl1 stringByAppendingString:@"    "]; 
      lbl1 = [lbl1 stringByAppendingString:@"15.00"]; 
      label.text = lbl1; 
      return label; 
     } 
     else if ([_currentCity isEqual:@"Puducherry"]) 
     { 
      __weak NSString *lbl1 = [NSString stringWithFormat:@"1.8 Km"]; 
      lbl1 = [lbl1 stringByAppendingString:@"    "]; 
      lbl1 = [lbl1 stringByAppendingString:@"25.00"]; 
      label.text = lbl1; 
      return label; 
     } 
     else if ([_currentCity isEqual:@"Pune"]) 
     { 
      __weak NSString *lbl1 = [NSString stringWithFormat:@"1.5 Km"]; 
      lbl1 = [lbl1 stringByAppendingString:@"    "]; 
      lbl1 = [lbl1 stringByAppendingString:@"17.00"]; 
      label.text = lbl1; 
      return label; 
     } 
    } 
    else 
    { 
    __weak NSString *lbl1 = [NSString stringWithFormat:@"%@", self.KmArray[row]]; 
    lbl1 = [lbl1 stringByAppendingString:@"    "]; 
    lbl1 = [lbl1 stringByAppendingString:[NSString stringWithFormat:@"%@", self.fareArray[row]]]; 
    label.text = lbl1; 
    return label; 
    } 
} 
return 0; 
} 
    - (IBAction)GetFare:(id)sender 
    { 
[self.ScrollView setAlpha:1]; 
NSInteger row = [_SelectCity selectedRowInComponent:0]; 
self.currentCity = [[NSString alloc] initWithFormat:@"%@", [_CityList objectAtIndex:row]]; 
NSLog(@"Selected city is %@", _currentCity); 
[self populatePickerArray]; 
[_FareList reloadAllComponents]; 
} 
    -(void)populatePickerArray 
{ 
float z=0.0, x = 0.0, ch = 25.0, mu = 15, pu = 17; 
float y = 0.0, chd = 1.9, del = 2.1, mud = 1.6, blore = 2.0, pud = 1.6, pudd = 1.9; 
if ([_currentCity isEqual:@"Chennai"]) 
{ 
    x = ch; 
    y = chd; 
    z = 1.2; 
    [self.FareList reloadAllComponents]; 
} 
else if ([_currentCity isEqual:@"Banglore"]) 
{ 
    x = ch ; 
    y = blore; 
    z = 1.3; 
    [self.FareList reloadAllComponents]; 

} 
else if ([_currentCity isEqual:@"Delhi"]) 
{ 
    x = ch ; 
    y = del; 
    z = 0.8; 
    [self.FareList reloadAllComponents]; 

} 
else if ([_currentCity isEqual:@"Mumbai"]) 
{ 
    x = mu ; 
    y = mud; 
    z = 1.0; 
    [self.FareList reloadAllComponents]; 

} 
else if ([_currentCity isEqual:@"Pune"]) 
{ 
    x = pu ; 
    y = pud; 
    z = 1.16; 
    [self.FareList reloadAllComponents]; 

} 
else 
{ 
    x = ch; 
    y = pudd; 
    z = 1.5; 
    [self.FareList reloadAllComponents]; 
} 
float i = x; 
for (float weight = y; weight <= 25.01; weight = weight + 0.1) 
{ 
    i = i + z; 
    //[_KmArray addObject:[NSNumber numberWithFloat:weight]]; 
    NSString *weightString = [NSString stringWithFormat:@"%0.1f Km", weight]; 
    [_KmArray addObject:weightString]; 
    NSString *fareString = [NSString stringWithFormat:@"%0.2f", i]; 
    [_fareArray addObject:fareString]; 
} 
} 

ответ

1

Убедитесь, что populatePickerArray называется и сразу же после вызова reloadAllComponents на оба ваши взгляды пипетка.

Помимо этого, ваш код является грязным и избыточным. Вы должны подумать о создании отдельного объекта для вашего выбора, чтобы сделать код более читаемым.

Обратите внимание, что соглашение состоит в том, что переменные не начинаются с прописных букв. Таким образом, cityList, а не CityList. Инициалы верхнего регистра зарезервированы для классов и некоторых констант.

+0

все работает отлично с помощью первого pickerView ... проблема заключается только в том, что второй pickerView и спасибо за исправление в соглашениях об именах и удобочитаемости кода, наверняка работайте над этим .... Даже несмотря на то, что realoadAllComponents вызывается сразу, это работает доцентом ... :( – nravichan

+0

Это означает, что вы не обновили массив, отвечающий за второй выборщик. Установите контрольную точку и проверьте. – Mundi

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