我在一个视图中有 8 个文本字段。我想使用pickerview填充每个。我可以有 1 个pickerview 来为不同的文本字段显示来自不同数组的不同项目列表吗?
有人可以解释我如何使用示例代码以编程方式进行操作吗?
另外,如何在视图加载时隐藏选择器视图,并且仅当我单击带有相应数据列表的文本字段时才应显示它?当我选择数据时它应该消失,当我单击具有相应数据列表的不同文本字段时它会重新出现,依此类推。
我是 xcode 的新手。任何帮助都感激不尽。谢谢你。
我在一个视图中有 8 个文本字段。我想使用pickerview填充每个。我可以有 1 个pickerview 来为不同的文本字段显示来自不同数组的不同项目列表吗?
有人可以解释我如何使用示例代码以编程方式进行操作吗?
另外,如何在视图加载时隐藏选择器视图,并且仅当我单击带有相应数据列表的文本字段时才应显示它?当我选择数据时它应该消失,当我单击具有相应数据列表的不同文本字段时它会重新出现,依此类推。
我是 xcode 的新手。任何帮助都感激不尽。谢谢你。
您只能使用一个 PickerView,根据某些条件显示不同的数据。
我的想法如下:你可以创建,比如说,8 个不同的数组——一个用于填充 UIPickerView,具体取决于所点击的 UITextField。在接口中将它们声明为 NSArray 并在 viewDidLoad 中初始化:
array1st = ...
array2nd = ...
array3d = ...
//and until 8.
然后你创建另一个只是为了指向应该填充它的数组(如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
}
因此,当您的视图控制器实际上是 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];
现在您需要创建名为 的方法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)];
}];
}
在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];
}
并且当用户在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]];
}
用这个。
- (void)textFieldDidBeginEditing:(UITextField *)textField{
MyPickervie.delegate=self;
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)myLocationPickerView;
{
return 1;
}
-(void)myLocationPickerView:(UIPickerView *)myLocationPickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component;
{
switch(textfield.tag){
Case 0:
label.text=[arraNo objectAtindex:row];
break;
default: break;
}
}
-(NSInteger)myLocationPickerView:(UIPickerView *)myLocationPickerView numberOfRowsInComponent:(NSInteger)component;
{
switch(textfield.tag){
Case 0:
return [arrayNo count];
break;
default: break;
}
}
-(NSString *)myLocationPickerView:(UIPickerView *)myLocationPickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
switch(textfield.tag){
Case 0:
return [arrayNo objectAtIndex:row];
break;
default: break;
}
}
您必须在切换条件下使用 8 个案例来调用不同的数组并将其设置到 pickerView 中。
我已经用 3 个文本字段测试了这段代码。
并找到您问题的完美解决方案。
1) 取一个全局 UITextField。
2)在文本字段编辑的委托方法上,将全局文本字段设置为当前文本字段。
3)在选择器值更改方法上,设置全局文本字段的文本,它将更改所选文本字段的值。
下面的代码工作正常。
享受编码。
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component
{
return 10;
}
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [NSString stringWithFormat:@"Test %d",row + 1];
}
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
test.text = @"XYZ";
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
test = textField;
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
1.使用带有完成barButtonItem的工具栏,它应该隐藏pickerView。
2.现在给你的 textFields tagValues 像:textFiled1.tag=100;
然后使用这个标签值填充你的 pickerView 数组。
3.当用户从pickerView中选择任何Value时,在其委托方法中写入
if(textField.tag== @"Your Tag Value")
{
textField.text=[pickerArray objectAtIndex:row];
}
我想您可以自己尝试代码,现在您已经掌握了解决方案的要点。祝您好运!