Как определить UIPickerView центральный ряд при вращении

Из-за недостатка места на экране я пытаюсь отобразить описание (UILabel появляется право на pickerView при вращении) изображения в UIPickerView, когда пользователь вращает колесо. Я использую viewForRow: чтобы обнаружить вращение и показать описание. Проблема в том, что, используя код, который я написал до сих пор, он не может отобразить описание первых 2 строк и последних 2 строк. Вот мой код:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UIImageView *image=[[[UIImageView alloc]initWithImage:[UIImage imageNamed:[zodiacSigns objectAtIndex:row]]]autorelease];
    selectedZodiac.frame=CGRectMake(80, 80, 50, 50);
    selectedZodiac.hidden=NO;
    @try {
    //Here -2 is offset of the view in central row
        selectedZodiac.text=[zodiacSigns objectAtIndex:row-2];
    }
    @catch (NSException *exception) {
        NSLog(@"Exception caught");
    }
    @finally {

    }
    if([yourZodiacPicker selectedRowInComponent:0]!=0)
    {
        [self.view insertSubview:selectedZodiac aboveSubview:self.view];
    }
    NSLog(@"reuseView");
    return image;
}

Любая помощь будет принята с благодарностью!

2 ответа

Решение

Я думаю, что лучшим способом было бы воссоздать PickerView с ScrollView/TableView и соответствующим наложенным изображением, если вам действительно нужна эта функциональность.

Отключите выделение / выделение и прокрутите до ближайшей "ячейки", когда просмотр прокрутки прекратится.

Затем определите ячейку, которая находится в середине экрана. Вы также должны добавить представление до и после содержимого, чтобы пользователь мог переместить первую / последнюю ячейку в середину экрана.

Я мог бы неправильно понять, но если вам нужно отобразить описание изображения, выбранного в данный момент, вы должны реализовать pickerView: didSelectRow: inComponent: и установить там метку описания вместо того, чтобы делать это в viewForRow: forComponent:. Это было бы что-то вроде этого:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    selectedZodiac.frame=CGRectMake(80, 80, 50, 50);
    selectedZodiac.hidden=NO;
    selectedZodiac.text=[zodiacSigns objectAtIndex:row];
}

Таким образом, вы всегда будете отображать описание выбранной строки выбора.

Другие вопросы по тегам