gpt4 book ai didi

objective-c - 如何将 UIPicker 与多个文本字段一起使用

转载 作者:行者123 更新时间:2023-11-29 04:31:13 25 4
gpt4 key购买 nike

我可以从选择器获取一个文本框值到一个文本框。如何为更多文本框获取不同的值。目前,即使我只填写一个文本框并且只显示第一个 NSArray 中的值,所有文本字段都会被填充。我尝试了 if 语句,Apple 文档没有太大帮助。

我不知道标记是如何工作的,但注意到在研究这个问题时提到了它。如果我没有正确解释这一点,我很抱歉,如果我没有充分解释它,可以下载一个测试应用程序来更好地解释它

APP example

.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate,UITextFieldDelegate>

{
//decalre picker
UIPickerView *select;



//declare NSArrray
NSArray *arrStatus;
NSArray *arrStatus2;


}

@property (strong, nonatomic) IBOutlet UITextField *text1;
- (IBAction)Value:(id)sender;
@property (strong, nonatomic) IBOutlet UITextField *text2;
@end

.m

     - (void)viewDidLoad
{



///create picker//////////////////////////////////////////////////////////////////////////

select = [[UIPickerView alloc] initWithFrame:CGRectZero];
select.delegate = self;
select.dataSource = self;
[select setShowsSelectionIndicator:YES];
text1.inputView = select;
text2.inputView = select;



////arrays & objects
arrStatus = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",nil];
arrStatus2 = [[NSArray alloc] initWithObjects:@"A",@"B",@"C",@"D",nil];

//number of colums and rows etc of picker
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
//One column
return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
//set number of rows
return arrStatus.count;
return arrStatus2.count;

}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
//set item per row
return [arrStatus objectAtIndex:row];
return [arrStatus2 objectAtIndex:row];


- (IBAction)Value:(id)sender {

///get picker values to text field
NSInteger selectedRow = [select selectedRowInComponent:0];

text1.text = [arrStatus objectAtIndex: selectedRow];
[text1 resignFirstResponder];

text2.text = [arrStatus2 objectAtIndex: selectedRow];
[text2 resignFirstResponder];


}

@end

最佳答案

在 didselectrow 的方法中,我让 if 语句查看哪个文本字段是第一响应者。然后使用下面的代码。它将 uipicker 值放置在每个文本字段中。

-(void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if ([_input1 isFirstResponder])
{
NSString *resultString1 = [[NSString alloc] initWithFormat:[gradeArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
NSString *resultString2 = [[NSString alloc] initWithFormat:[plusMinusArray objectAtIndex:[pickerView selectedRowInComponent:1]]];
NSString *gradeResult = [resultString1 stringByAppendingString:resultString2];
_input1.text = gradeResult;
}else if ([_input2 isFirstResponder])
{
NSString *resultString1 = [[NSString alloc] initWithFormat:[gradeArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
NSString *resultString2 = [[NSString alloc] initWithFormat:[plusMinusArray objectAtIndex:[pickerView selectedRowInComponent:1]]];
NSString *gradeResult = [resultString1 stringByAppendingString:resultString2];
_input2.text = gradeResult;
}else if ([_inputM isFirstResponder])
{
NSString *resultString1 = [[NSString alloc] initWithFormat:[gradeArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
NSString *resultString2 = [[NSString alloc] initWithFormat:[plusMinusArray objectAtIndex:[pickerView selectedRowInComponent:1]]];
NSString *gradeResult = [resultString1 stringByAppendingString:resultString2];
_inputM.text = gradeResult;
}else if ([_input3 isFirstResponder])
{
NSString *resultString1 = [[NSString alloc] initWithFormat:[gradeArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
NSString *resultString2 = [[NSString alloc] initWithFormat:[plusMinusArray objectAtIndex:[pickerView selectedRowInComponent:1]]];
NSString *gradeResult = [resultString1 stringByAppendingString:resultString2];
_input3.text = gradeResult;
}else if ([_input4 isFirstResponder])
{
NSString *resultString1 = [[NSString alloc] initWithFormat:[gradeArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
NSString *resultString2 = [[NSString alloc] initWithFormat:[plusMinusArray objectAtIndex:[pickerView selectedRowInComponent:1]]];
NSString *gradeResult = [resultString1 stringByAppendingString:resultString2];
_input4.text = gradeResult;
}
}

希望这对您有所帮助。

编辑

如果你想在选择器中获取两个数组,你需要将列设置为2。这将显示两个数组。我使用以下代码在选择器 View 中显示我的两个数组。

-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}

-(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (component == 0)
{
return [gradeArray count];
}
return [plusMinusArray count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component == 0)
{
return [gradeArray objectAtIndex:row];
}
return [plusMinusArray objectAtIndex:row];
}

关于objective-c - 如何将 UIPicker 与多个文本字段一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com