代码之家  ›  专栏  ›  技术社区  ›  Mihai Damian

UIPickerView点击可滚动自定义行视图(&C)

  •  4
  • Mihai Damian  · 技术社区  · 14 年前

    您可以通过滑动和轻触选择带下方或上方的项目来滚动UIPickerView。

    可以通过将NSString指定为标题或为每行指定可重用的UIView来填充UIPickerView。

    我注意到,当我从提供字符串切换到提供视图时,点击滚动不再有效。这是预期的行为。我的观点是否应该将一些接触事件转发给UIPickerView?

    编辑:

    以下是我的实现的代码示例:

    // Creating the picker
    screenPicker_ = [UIPickerView new];
    screenPicker_.showsSelectionIndicator = YES;
    screenPicker_.delegate = delegate_;
    screenPicker_.dataSource = delegate_;
    [self addSubview:screenPicker_];
    [screenPicker_ release];
    
    // Row view creation delegate
    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    {
        PickerRowView *pickerRowView = (PickerRowView*)view;
        if(view == nil)
        {
            pickerRowView = [[PickerRowView alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, PICKER_ROW_HEIGHT)];
        }
    
        [pickerRowView SetTitle:@"some title"];
    
        return pickerRowView;
    }
    
    // initailizer of the PickerRowView class (an UIView subclass)
    - (id)initWithFrame:(CGRect)frame 
    {
        if ((self = [super initWithFrame:frame])) 
        {
            CGFloat titleHeight = frame.size.height * CONTENT_TO_FRAME_RATIO;
            title_ = [[UILabel alloc] initWithFrame:CGRectMake(TITLE_X, (frame.size.height - titleHeight) / 2, frame.size.width, titleHeight)];
            [title_ setFont:[UIFont fontWithName:@"StainlessExt-Light" size:titleHeight]];
            title_.backgroundColor = [UIColor clearColor];
            [self addSubview:title_];
            [title_ release];
    
            self.userInteractionEnabled = NO;
        }
        return self;
    }
    
    2 回复  |  直到 14 年前
        1
  •  6
  •   Vladimir    14 年前

    设置 userInteractionEnabled 属性到 NO

        2
  •  0
  •   Rod    14 年前

    在PickerRowView类中,定义以下方法:

    - (void)didMoveToSuperview {
    if ([[self superview] respondsToSelector:@selector(setShowSelection:)])
    {
        [[self superview] performSelector:@selector(setShowSelection:) withObject:NO];
    } }
    

    这样就可以去掉亮点了