0

ピッカーから 1 つのテキスト ボックスにテキスト ボックスの値を取得できます。より多くのテキスト ボックスに異なる値を取得するにはどうすればよいですか。現在、1 つのテキスト ボックスにのみ入力し、最初の NSArray からの値のみを表示しても、すべてのテキスト フィールドが入力されます。私は声明を試みましたがif、Appleのドキュメントはあまり役に立ちません。

タグ付けがどのように機能するかはわかりませんが、これを調査しているときに言及されたことに注意してください. これを適切に説明していない場合はお詫びします

アプリの例

.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
4

1 に答える 1

1

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 にする必要があります。これにより、両方の配列が表示されます。次のコードを使用して、両方の配列をピッカー ビューに表示しました。

-(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];
}
于 2012-07-30T11:33:57.680 に答える