San*_*hah 8 iphone xcode uipickerview uitextfield
我在一个视图中有8个文本字段.我想使用pickerview填充每个.我可以有1个pickerview,它会显示不同文本字段的不同数组的不同项目列表吗?
有人可以解释如何使用示例代码以编程方式执行此操作?
另外,如何在加载视图时隐藏选择器视图,只有当我单击带有相应数据列表的文本字段时才应显示它?当我选择数据时它应该消失,当我点击具有相应数据列表的不同文本字段时重新出现,等等.
我是xcode的新手.任何帮助都感激不尽.谢谢.
Nat*_* R. 11
根据某些条件,您只能使用一个显示不同数据的PickerView.
我的想法如下:你可以创建8个不同的数组 - 一个用于填充UIPickerView,具体取决于UITextField被点击的内容.在接口中将它们声明为NSArray并在viewDidLoad中初始化:
array1st = ...
array2nd = ...
array3d = ...
//and until 8.
Run Code Online (Sandbox Code Playgroud)
然后你创建另一个只是指向应该填充它的数组(如NSArray *currentArray
),你甚至不需要初始化它=它将仅用于指向正确的数组.
因此,您应该将UITextFields的委托设置为视图控制器,并在方法中textFieldShouldBeginEditing
检查谁是UITextField,将正确的数组指定为currentArray,重新加载UIPickerView reloadData
,并以相同的textFieldShouldBeginEditing
方法返回NO .currentTextField是一个指针,只知道被编辑的currentUITextField是什么 - 我们需要存储它以便能够在选择器中选择数据后设置文本.在接口中声明currentTextField.
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
currentTextField = textField;
if (textField == myFirstTextView)
{
currentArray = array1st;
[pickerView reloadData];
[self animatePickerViewIn];
return NO;
}
//and this way until 8th
}
Run Code Online (Sandbox Code Playgroud)
因此,当你的视图控制器,实际上是UIPickerViewDelegate,你根据当前数组填充你的UIPickerView,你不需要改变任何东西,只需使用currentArray作为数组来获取数据.
现在,要显示pickerView:
连接IBOutlet后,在viewDidLoad中你应该做两件事:设置UIPickerView的框架并将其添加为子视图:
pickerView.frame = CGRectMake(0,self.view.frame.size.height, pickerView.frame.size.width, pickerView.frame.size.height);
pickerView.delegate = self;
pickerView.dataSource = self;
//or you can do it via Interface Builder, right click the pickerView and then connect delegate and dataSource to the file's owner
[self.view addSubview:pickerView];
Run Code Online (Sandbox Code Playgroud)
现在你需要创建一个被调用的方法animatePickerViewIn
,当用户点击UITextField时我们调用它.
-(void)animatePickerViewIn
{
[UIView animateWithDuration:0.25 animations:^{
[pickerView setFrame:CGRectMake(0, pickerView.frame.origin.y-pickerView.frame.size.height, pickerView.frame.size.width, pickerView.frame.size.height)];
}];
}
Run Code Online (Sandbox Code Playgroud)
要在pickerView中加载数据:
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [currentArray count];
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [currentArray objectAtIndex:row];
}
Run Code Online (Sandbox Code Playgroud)
当用户选择pickerView中的行时,您将收到它作为委托方法.因此,只需将currentTextField的文本设置为所选值:
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
//and here you can do in two ways:
//1
[currentTextField setText:[currentArray objectAtIndex:row]];
//2
[currentTextField setText:[self pickerView:pickerView titleForRow:row inComponent:component]];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12354 次 |
最近记录: |