в окне выбора отображается число в окне выбора, но не отображается должным образом на этикетке? - PullRequest
0 голосов
/ 11 октября 2009

Я добавил сборщик из Interface Builder.Я использую этот метод для отображения данных, подобных этим ...

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (pickerView == SpotPickerView) // don't show selection for the custom picker
{
  // report the selection to the UI label
 label.text = [NSString stringWithFormat:@"%d - %@ - %d",[pickerView selectedRowInComponent:0],
   [RowArray objectAtIndex:[pickerView selectedRowInComponent:1]],
   [pickerView selectedRowInComponent:2]];
}
}


- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
 NSString *returnStr = @"";
 if (pickerView == SpotPickerView)
 {
  if (component == 0)
  {
    returnStr = [[NSNumber numberWithInt:row+1] stringValue];
  }
  else if(component==1)
  {
    returnStr = [RowArray objectAtIndex:row];
  }
else
 {
   returnStr =[[NSNumber numberWithInt:row+1] stringValue];
  }
}

  return returnStr;
}

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
  CGFloat componentWidth = 0.0;

  if (component == 0)
  componentWidth = 90.0;
  else if (component == 1)
  componentWidth = 100.0; 
  else 
  componentWidth = 90.0; 

  return componentWidth;
}

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
 {
   return 40.0;
 }

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
   int count;
   if (component == 0)
   count = 15;
  else if (component == 1)
   count=[RowArray count]; 
 else 
  count = 100;

 return count;
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
   return 3;
}

вот RowArray

- (void)viewDidLoad {
RowArray = [[NSArray arrayWithObjects:
  @"A", @"B", @"C",
  @"D", @"E", @"F", @"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",
  @"U",@"V",@"W",@"X",@"Y",@"Z",
  nil] retain];
}

, но выбор первой строки показывает это.

alt text

Мне нужно сохранить значения в базе данных, поэтому мне нужно 1 вместо нуля.

также, как мне сбросить мой вид выбора. Значит, когда я нажимаю на кнопку, он автоматически достигает 0-го индекса в каждом столбце.

1 Ответ

1 голос
/ 11 октября 2009
label.text = [NSString stringWithFormat:@"%d - %@ - %d",[pickerView selectedRowInComponent:0],
    [RowArray objectAtIndex:[pickerView selectedRowInComponent:1]],
    [pickerView selectedRowInComponent:2]];

Этот код извлекает номер строки из выбранной строки в компоненте. Массивы индексируются нулем, и представление выбора (вероятно) использует массивы для управления строками. Итак, первая строка будет 0, вторая 1, третья 2 и так далее. Это легко решить, выполнив:

[pickerView selectedRowInComponent:0] + 1

Вы можете выбрать определенные строки программно, используя selectRow:inComponent:animated Если вы хотите выбрать 0-й индекс в каждом столбце, просто выполните: [pickerView selectRow:0 inComponent:0 animated:YES] для каждого компонента.

...