以编程方式添加UIPickerView

时间:2015-10-21 20:09:32

标签: ios iphone uitextfield uipickerview

我正在尝试以编程方式添加UIPickerView,但我没有得到所需的结果。

我有一个滚动视图,我添加了一些UITextFields,如下图所示。

我们的想法是,当用户选择DATE时,会显示UIDatePicker,并且用户会选择DATE。按NEXT选择器DATE上的UIBarButtonItem按钮(我也以编程方式添加),TIME文本字段获得焦点,UIDatePicker(默认为时间) )显示。对于DATETIME字段,我使用了UIDatePicker,这是100%的工作。

enter image description here

对于其余3个文本字段,我尝试使用UIPickerView代替DATE,因为它们不是TIMESEARCH类型。

然而,当我运行我的代码时,我得到以下结果,如下所示。可能很难从图像中找出,但在底部黄色UIPickerView按钮后面/上方应该是PROFILE(可以看作是SEARCH和{{1上方的灰线吧项目)

enter image description here

我的UIPickerViewDelegate方法(numberOfComponentsInPickerViewnumberOfRowsInComponenttitleForRowdidSelectRow)会在视图首次出现时运行,但不会再出现在我看到的内容时执行程序。在这里,我定义了要在Country或County文本字段中显示的数据数组。

以下是我到目前为止以编程方式显示UIPickerViews的代码。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self initPickers];
}

- (void) initPickers
{
    // Used for all other reusable UIPickerViews
    pickerView = [[UIPickerView alloc] init];
}

然后,例如COUNTRY文本字段获得焦点(这是经过测试和工作的),我按如下方式设置UIPickerView的动画:

- (BOOL) textFieldShouldBeginEditing:(UITextField*) textField
{
    activeTextField = textField;

    if (activeTextField.tag == 2)
    {
        self.countryTextField.inputView = pickerView;

        // We are on the Country Text Field
        currentArray = countryDataArray;
        NSLog(@"Array Count %ld", [currentArray count]);  // Is populated with data

        [self animatePickerViewIn];
        return NO;
    }

    return YES;
}

-(void) animatePickerViewIn
{
    // Get the screen width and size
    float screenWidth = [[UIScreen mainScreen] bounds].size.width;
    float screenHeight = [[UIScreen mainScreen] bounds].size.height;

    // Calculate the starting X Coordinate
    float pickerWidth = screenWidth;
    float pickerHeight = pickerView.frame.size.height;
    float pickerViewStartinYCoordinate = screenHeight - pickerView.frame.size.height;

    // Animate in and set PickerView to dimensions and coordinates
    [UIView animateWithDuration:0.25 animations:^{
        [pickerView setFrame:CGRectMake(0, pickerViewStartinYCoordinate, pickerWidth, pickerHeight)];

        [self.view addSubview:pickerView];
    }];
}

任何人都可以解释为什么我没有看到完整的UIPickerView吗?

1 个答案:

答案 0 :(得分:3)

执行此操作的正确方法是将日期选择器设置为文本字段的inputView。这样,当文本字段成为第一响应者时,UIKit将负责将日期选择器动画到屏幕上(如果适用)。您还可以使用“下一步”按钮将工具栏设置为inputAccessoryView,UIKit也会显示该工具栏。

如果你只是将日期选择器和选择器视图设置为文本字段的输入视图,这就是它的样子:

demo

以下是我的演示应用的源代码:https://github.com/mayoff/ios-picker-input-views