2012-07-30 24 views
0

我可以從一個選擇器獲取文本框值到一個文本框。我如何獲得更多文本框的不同值。目前,即使只填寫一個文本框並僅顯示第一個NSArray的值,所有文本字段都會被填充。我試過if聲明,Apple文檔沒有太大的幫助。如何使用UIPicker與多個文本字段

我不知道如何標記工作,但指出它在研究這一點時被提及。道歉,如果我沒有解釋這個正確繼承人一個測試應用程序下載,如果我havnt做太大的意義,說明它更好

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 

回答

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.這將顯示兩個數組。我使用下面的代碼在picker視圖中顯示我的數組。

-(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]; 
} 
+0

我還確保每個文本字段都使用選擇器作爲其輸入視圖。 _input1.inputView = pickerView; _input2.inputView = pickerView; _inputM.inputView = pickerView; _input3.inputView = pickerView; _input4.inputView = pickerView; – Douglas 2012-07-30 11:41:20

+0

感謝您的回覆,這是非常有用的,我可以適應,所以我現在可以獨立使用文本框,這是我以後的。我沒有將文本框聲明爲第一響應者我現在唯一的問題是如何獲得不同的NSArrays。目前它只提供第一個數組。我可以在另一個問題中提問。 – JSA986 2012-07-30 11:49:28

+0

@ JSA986,我做了一個編輯,我想這就是你所指的。如果不是的話,我很高興能夠提供一點幫助。 – Douglas 2012-07-30 12:01:32