2012-07-30 2 views
-1

정말이 중 하나에 가까워 ...이 목적을 위해 두 개의 텍스트 상자가 있습니다. 눌렀을 때 UI 픽커가 호출됩니다.피커보기에서 하나 이상의 배열을 얻는 방법

텍스트 상자 하나를 리턴 두 리턴 값 1,2,3,4-

입력란 값들 A, B, C, D

문제가 있음 피커는 텍스트 상자 두을 위해 제시 될 때 텍스트 상자 2에서 적절한 행을 선택하지만 텍스트 상자 1의 값을 표시합니다. 누군가가 내 코드를 검사하고 어디서 오류가 발생했는지 말해 줄 수 있겠습니까? 고마워요.

.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

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize text2; 

@synthesize text1; 

- (void)viewDidLoad 
{ 



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


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


-(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]; 



[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)viewDidUnload 
{ 
[self setText1:nil]; 
[self setText2:nil]; 

[super viewDidUnload]; 
// Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (IBAction)Value:(id)sender { 




NSInteger selectedRow = [select selectedRowInComponent:0]; 

if([text1 isFirstResponder]) 
text1.text = [arrStatus objectAtIndex: selectedRow]; 
[text1 resignFirstResponder]; 

if ([text2 isFirstResponder]) 
text2.text = [arrStatus2 objectAtIndex: selectedRow]; 
[text2 resignFirstResponder]; 


} 

@end 

그래서 1 개 콜 럼, 2 개 배열, 2 개 텍스트 상자, 1 개 선택기보기를 얻으려고 노력 메신저를 요약합니다. 필자가 다른 피커보기를 만들려고했지만 그 중 하나도 작동하지 않았습니다.

+0

데이터를 색인하기 위해'NSDictionary'를 사용하려고하면, 반환 할 때''1 ''과''A "'를 모두 보낼 수 있습니다. – NSPunk

+0

Ive가 모든 사람의 의견을 보드에 기록하고 코드를 조정했습니다. 그러나 먼저 다른 텍스트 상자가 다른 NSArray에서 개체를 선택하는 경우에도 다른 텍스트 상자에 대해 표시됩니다 먼저 표시됩니다. 예를 들자면 http://cl.ly/1v2B0Q3I3D1H – JSA986

+0

나는 그것을 점검 할 것이다. – NSPunk

답변

3

return 문에서 메서드가 종료됩니다. 따라서 문이 2 return 인 경우 절대로 두 번째 절에 도달하지 않습니다. 이러한 방법을 다음과 같이 수정해야합니다.

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if([text1 isFirstResponder]) 
     return arrStatus.count; 
    else 
     return arrStatus2.count; 
} 

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if([text1 isFirstResponder]) 
     return [arrStatus objectAtIndex:row]; 
    else 
     return [arrStatus2 objectAtIndex:row]; 
} 

희망이 있습니다. 건배!

+0

안녕하세요, 답장을 보내 주셔서 감사합니다, 두 상자에 대한 동일한 NSArray 선물을 다시하지만 두 상자에 대한 두 번째 NSArray 그냥 첫 번째 대신 가져올 수있게됩니다. 각 텍스트 상자에 대해 하나 이상의 배열이있는 선택기를 채우려면 어떻게합니까? – JSA986

+0

위의 첫 번째 방법에서는 pickerView에서 항목 수를 지정해야합니다. 여러 개의 배열을 원하면 array1.count + array2.count 등을 사용하십시오. 두 번째 메소드에서'if (row George

+0

어쨌든 덕분에 작동하지 않습니다. – JSA986

0

이것은 주어진 배열로 피커보기를 표시 할 수있는 코드이며 텍스트 필드는 UIPickerView의 첫 번째 데이터를 갖습니다. 문제점이있는 경우 알려주세요. 다음 텍스트 필드 당신은 단지 텍스트 필드의 태그를 사용하여 알아 내고 텍스트를 설정해야합니다.

-(void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     arrayNo = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",nil]; 
     [pickerView selectRow:1 inComponent:0 animated:NO]; 
     self.text1.text= [arrayNo objectAtIndex:[pickerView selectedRowInComponent:0]]; 
} 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; 
{ 
    return 1; 
} 
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    mlabel.text= [arrayNo objectAtIndex:row]; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; 
{ 
    return [arrayNo count]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
{ 
    return [arrayNo objectAtIndex:row]; 
} 
+0

그 개체 양식을 두 번째 NSArray를 따기, 난 그냥 수 없습니다 개체를 제시하는 것 피커보기에서 – JSA986

+0

안녕하세요, 위의 코드를 사용하십시오 .. – Sandy

관련 문제