2013-05-17 8 views
0

Ребята, я столкнулся с проблемой при внедрении метода делегирования для UIPickerview. Описание проблемы: я хочу иметь 3 компонента в pickerview и каждый компонент, имеющий различное количество строк. Код для этого выглядит следующим образомМетод делегата UIPickerView titleForRow не выполняется правильно?

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

} 

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 

{ 
    NSInteger rows; 
    if (0 == component) 
     rows = 5; 
    else if (1 == component) 
     rows = 10; 
    else 
     rows = 15; 

    NSLog(@"Number of rows returned for component %d are rows %d",component, rows); 
    return rows; 
} 

После этого я реализую «titleForRow» метод делегата кода, для которого заключается в следующем:

#pragma -mark UIPIckerView Delegate Methods 
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
     //NSString *temp; 


     //temp = [[NSString alloc] initWithString:[self.pocModelData.arrayOfDistricts objectAtIndex:row]]; 
    if (0 == component) 
    { 
    NSLog(@"String returned is %@ for row %d for component %d", [self.pocModelData.arrayOfDistricts objectAtIndex:row], row, component); 
    return [self.pocModelData.arrayOfDistricts objectAtIndex:row]; 
    } 
    else if 
     (1 == component){ 
     NSLog(@"String returned is %@ for row %d for component %d", [self.pocModelData.arrayOfDistricts objectAtIndex:row], row, component); 
    return [self.pocModelData.arrayOfDistricts objectAtIndex:row]; 
    }else{ 
     NSLog(@"String returned is %@ for row %d for component %d", [self.pocModelData.arrayOfDistricts objectAtIndex:row], row, component); 
    return [self.pocModelData.arrayOfDistricts objectAtIndex:row]; 
    } 
     //return temp; 
     // return [self.pocModelData.arrayOfDistricts objectAtIndex:row]; 
} 

Этот метод на выполнение возвращается только 3 строки для каждого компонента , как показано на следующих утверждений

2013-05-18 02:00:40.743 PopOverControllerExample[8228:c07] Number of rows returned for component 0 are rows 5 
2013-05-18 02:00:41.221 PopOverControllerExample[8228:c07] Number of rows returned for component 1 are rows 10 
2013-05-18 02:00:41.696 PopOverControllerExample[8228:c07] Number of rows returned for component 2 are rows 15 
2013-05-18 02:00:42.035 PopOverControllerExample[8228:c07] Number of rows returned for component 0 are rows 5 
2013-05-18 02:00:43.761 PopOverControllerExample[8228:c07] String returned is 1 for row 0 for component 0 
2013-05-18 02:00:44.687 PopOverControllerExample[8228:c07] String returned is 2 for row 1 for component 0 
2013-05-18 02:00:45.048 PopOverControllerExample[8228:c07] String returned is 3 for row 2 for component 0 
2013-05-18 02:00:45.544 PopOverControllerExample[8228:c07] Number of rows returned for component 1 are rows 10 
2013-05-18 02:00:46.131 PopOverControllerExample[8228:c07] String returned is 1 for row 0 for component 1 
2013-05-18 02:00:46.620 PopOverControllerExample[8228:c07] String returned is 2 for row 1 for component 1 
2013-05-18 02:00:47.380 PopOverControllerExample[8228:c07] String returned is 3 for row 2 for component 1 
2013-05-18 02:00:47.772 PopOverControllerExample[8228:c07] Number of rows returned for component 2 are rows 15 
2013-05-18 02:00:48.543 PopOverControllerExample[8228:c07] String returned is 1 for row 0 for component 2 
2013-05-18 02:00:48.915 PopOverControllerExample[8228:c07] String returned is 2 for row 1 for component 2 
2013-05-18 02:00:49.461 PopOverControllerExample[8228:c07] String returned is 3 for row 2 for component 2 

Я не могу понять, почему его выполнение только 3 раза для каждого компонента? Я заполняю строки набором данных, поэтому источник данных является общим для всех из них. В чем проблема, я не могу схватить и застрять в течение некоторого времени? Любое руководство высоко ценится и благодарит заранее.

ответ

1

Он запрашивает только видимые значения. С строкой 0 в центре спиннера вы видите 3 ряда. Как только вы начнете вращаться, он будет запрашивать другие значения.

+0

thnks @mvds, но можете ли вы уточнить немного больше? Исправьте меня, если я ошибаюсь, но вы имеете в виду, что его возвращающие 3 значения вызывают только 3 видимые строки? –

+1

@experimentalist yes, так как требуется больше значений, они запрашиваются. Просто вращайте сборщик, и вы увидите, что запрашиваются другие значения. – mvds

+0

большое спасибо за объяснение .. это помогло мне в решении моей проблемы !! :) –

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