일부 조건에 따라 다른 데이터를 표시하는 PickerView는 하나만 사용할 수 있습니다.
내 아이디어는 다음과 같습니다. 8 개의 다른 배열을 만들 수 있습니다. 하나는 UITextField가 탭 된 위치에 따라 UIPickerView를 채우는 것입니다. 있는 viewDidLoad에있는 NSArray 같은 인터페이스를 선언하고 초기화 :
array1st = ...
array2nd = ...
array3d = ...
//and until 8.
그런 다음 당신은 그냥 (NSArray *currentArray
을 같은) 작성해야 그 배열을 가리 키도록하고, 심지어 그것이 될 것입니다 = 초기화하기 위해서 필요하지 않은 다른를 만들 올바른 배열을 가리키는 데만 사용됩니다.
그래서 당신은 당신의 뷰 컨트롤러에 UITextFields의 대리자를 설정해야하고, 방법 당신은 UITextField에 누구인지 확인 currentArray으로 올바른 배열을 할당 reloadData
으로 UIPickerView를 다시로드, 같은에서 NO 반환 textFieldShouldBeginEditing
textFieldShouldBeginEditing
방법. 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
}
그래서, 뷰 컨트롤러, 사실 즉, 현재 배열에 따라 UIPickerView를 채우고 UIPickerViewDelegate 때 당신은 단지 데이터를 얻을 수있는 배열로 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];
사용자가 UITextField를 두 드릴 때 호출 한 animatePickerViewIn
이라는 메서드를 만들어야합니다.
-(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에서 행을 선택하면, 당신은 대리자 메서드로 나타납니다
-(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의 데이터를로드합니다.
-(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]];
}
안녕하세요, textfield.tag이 무엇인지 설명해 주시겠습니까? 그것은 스위치 필드에서 언명 된 텍스트 필드를 말하는가? 및 myLocationPickerView 어떤 label.text가 텍스트를 설정합니까? –
textfield.tag 여기서 .h 파일로 선언 한 텍스트 필드를 사용하고 IBOutlate 할 수 있습니다. 또한 picker 뷰에서 선택된 값은 label.text를 사용하여 레이블에 표시됩니다. 선택한 값을 표시하려는 위치 또는 레이블을 사용할 수 있습니다. –