1

我有一个UIScrollView,其中有几个UIViews子视图。在其中一个UIView我需要创建一个UIButton,单击它时,UIPickerView应该出现一个,如果我可以使按钮成为第一响应者,那么通过默认操作UIScrollView,它将向上滚动以放置UIPickerView...我有什么办法可以做到这一点?我需要子类UIControl吗?

4

3 回答 3

2

你可以使用这个:

-(void)btnAction{
UITextView* uitextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
uitextView.inputView = thePickerView;
[self.view addSubview:uitextView];

[uitextView becomeFirstResponder];}
于 2013-10-17T19:02:40.007 回答
1

这是按钮添加,在这种情况下直接在 _scrollView 中,您可以轻松更改它。

UIButton *btn = [[UIButton alloc] init];

// button customization

[btn addTarget:self action:@selector(showPickerView:) forControlEvents:UIControlEventTouchUpInside];

[_scrollView addSubview:btn];
[btn release]; // if non-ARC

之后,您需要实现该showPickerView:方法

- (void)showPickerView:(UIButton*)sender
{
    UIPickerView *picker = [[UIPickerView alloc] init];
    picker.tag = 998998;

    // picker customization..

    [self.view insertSubview:picker aboveSubview:_scrollView];
    [picker release]; // if non-ARC
}

这里的重要部分是当从选择器视图中触发关闭/完成按钮时,您必须隐藏选择器,我想到的最简单的方法是

if([self.view viewWithTag:998998] != nil) {
    [[self.view viewWithTag:998998] removeFromSuperview]
}
于 2012-12-04T08:53:12.220 回答
0

将 UIPickerView 初始化为 cell.picker = [[UIPickerView alloc] initWithFrame:CGRectZero]; 在一个子类中(无论你想让选择器在点击时出现什么)。然后覆盖该类的 inputView 方法并在该方法中返回 UIPickerView。该方法设置一个自定义输入视图以在对象成为第一响应者时显示。它会像键盘一样为您制作一切动画。要让滚动视图向上滚动,您需要以与键盘相同的方式处理此问题(即通过为滚动视图设置 contentOffset)。你可以在这里找到:苹果文档链接. 从这里开始应该是相当直接的,因为您有通知到对象何时辞去第一响应者并成为第一响应者。只需使用这些通知而不是键盘通知,并使用默认的 UIPickerView 大小而不是键盘。

    - (void)initalizeInputView {
    self.picker = [[UIPickerView alloc] initWithFrame:CGRectZero];
    self.picker.showsSelectionIndicator = YES;
    self.picker.autoresizingMask = UIViewAutoresizingFlexibleHeight;
}


- (UIView *)inputView {
        return self.picker;
}
于 2013-08-31T20:03:30.683 回答