如何在旋转时检测UIPickerView中心行

时间:2011-12-04 09:33:10

标签: iphone ios uipickerview

由于缺少屏幕空间,我尝试在用户旋转滚轮时在UIPickerView中显示图像的描述(旋转时UILabel出现在pickerView右侧)。我使用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 个答案:

答案 0 :(得分:2)

我想最好的方法是使用ScrollView / TableView和匹配的叠加图像重新创建PickerView,如果你真的需要这个功能的话。

禁用选择/突出显示并滚动到最近的"单元格"当滚动视图停止时。

然后确定屏幕中间的单元格。 您还应该在内容之前和之后添加视图,以便用户可以将第一个/最后一个单元格移动到屏幕中间。

答案 1 :(得分:-1)

我可能误解了,但如果你想要的是显示当前所选图像的描述,你应该实现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];
}

这样您就会始终显示所选选择行的描述。