我正在尝试以编程方式添加UIPickerView
,但我没有得到所需的结果。
我有一个滚动视图,我添加了一些UITextFields
,如下图所示。
我们的想法是,当用户选择DATE
时,会显示UIDatePicker
,并且用户会选择DATE
。按NEXT
选择器DATE
上的UIBarButtonItem
按钮(我也以编程方式添加),TIME
文本字段获得焦点,UIDatePicker
(默认为时间) )显示。对于DATE
和TIME
字段,我使用了UIDatePicker
,这是100%的工作。
对于其余3个文本字段,我尝试使用UIPickerView
代替DATE
,因为它们不是TIME
或SEARCH
类型。
然而,当我运行我的代码时,我得到以下结果,如下所示。可能很难从图像中找出,但在底部黄色UIPickerView
按钮后面/上方应该是PROFILE
(可以看作是SEARCH
和{{1上方的灰线吧项目)
我的UIPickerViewDelegate
方法(numberOfComponentsInPickerView
,numberOfRowsInComponent
,titleForRow
和didSelectRow
)会在视图首次出现时运行,但不会再出现在我看到的内容时执行程序。在这里,我定义了要在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吗?
答案 0 :(得分:3)
执行此操作的正确方法是将日期选择器设置为文本字段的inputView
。这样,当文本字段成为第一响应者时,UIKit将负责将日期选择器动画到屏幕上(如果适用)。您还可以使用“下一步”按钮将工具栏设置为inputAccessoryView
,UIKit也会显示该工具栏。
如果你只是将日期选择器和选择器视图设置为文本字段的输入视图,这就是它的样子:
以下是我的演示应用的源代码:https://github.com/mayoff/ios-picker-input-views