आप केवल एक पिकर व्यू का उपयोग कर सकते हैं जो कुछ स्थितियों के आधार पर अलग-अलग डेटा दिखाता है।
मेरा विचार निम्न है: आप UITexterView को टैप करने के आधार पर UIPickerView को पॉप्युलेट करने के लिए 8 अलग-अलग सरणी बना सकते हैं। उन्हें NSArray के रूप में इंटरफ़ेस में घोषित करने और viewDidLoad में प्रारंभ:
array1st = ...
array2nd = ...
array3d = ...
//and until 8.
तो फिर तुम सिर्फ सरणी का कहना है कि यह (जैसे NSArray *currentArray
) भरना चाहिए और तुम भी init करने के लिए इसे = यह होगा की जरूरत नहीं है के लिए एक और बनाने केवल सही सरणी को इंगित करने के लिए उपयोग किया जाता है।
तो आप अपने दृश्य नियंत्रक से UITextFields के प्रतिनिधि स्थापित करना चाहिए, और विधि में textFieldShouldBeginEditing
तुम कौन UITextField है की जाँच करें, currentArray के रूप में सही सरणी असाइन करते हैं, reloadData
साथ UIPickerView को फिर से लोड, और एक ही में कोई वापसी textFieldShouldBeginEditing
विधि। currentTextField केवल यह जानने के लिए एक सूचक है कि वर्तमान UITextField "संपादित" क्या है - हमें इसे पिकर में डेटा चुनने के बाद टेक्स्ट सेट करने में सक्षम होने के लिए स्टोर करने की आवश्यकता है। इंटरफ़ेस में CurrentTextField घोषित करें।
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
currentTextField = textField;
if (textField == myFirstTextView)
{
currentArray = array1st;
[pickerView reloadData];
[self animatePickerViewIn];
return NO;
}
//and this way until 8th
}
तो, जब आपके विचार नियंत्रक, कि वास्तव में UIPickerViewDelegate है, आप अपने UIPickerView वर्तमान सरणी के अनुसार पॉप्युलेट और तुम सिर्फ सरणी डेटा प्राप्त करने के रूप में currentArray का उपयोग कुछ भी बदलने की जरूरत नहीं है, से।
अब, pickerView को दिखाने के लिए:
IBOutlet कनेक्ट करने के बाद, अपने viewDidLoad में आपको दो काम करना चाहिए: UIPickerView के फ्रेम की स्थापना की और एक subview के रूप में जोड़ें:
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];
अब आपको animatePickerViewIn
नामक विधि बनाने की आवश्यकता है, जिसे हमने यूआईटीएक्स्टफिल्ड को टैप करते समय बुलाया था।
-(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 में डेटा लोड करने के लिए:
-(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)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 फ़ाइल में घोषित किया है और इसे आईबीओटलेट करें। और picker व्यू से चयनित मान लेबल.टेक्स्ट का उपयोग कर लेबल में प्रदर्शित होता है। आप अपने लेबल या कुछ भी उपयोग कर सकते हैं जहां आप चयनित मूल्य प्रदर्शित करना चाहते हैं। –