2012-07-23 11 views
8

मेरे पास एक दृश्य में 8 टेक्स्टफील्ड हैं। मैं एक pickerview का उपयोग कर प्रत्येक populate करना चाहता हूँ। क्या मेरे पास 1 पिकर्विव हो सकता है जो विभिन्न टेक्स्टफील्ड के लिए अलग-अलग सरणी से वस्तुओं की अलग-अलग सूची प्रदर्शित करेगा?एक दृश्य में एकाधिक टेक्स्टफील्ड के लिए एक यूआईपीकर व्यू का उपयोग कैसे करें?

क्या कोई समझा सकता है कि मैं इसे नमूना कोड के साथ प्रोग्रामेटिक तरीके से कैसे करूं?

दृश्य लोड होने पर मैं पिकव्यू को कैसे छुपा सकता हूं और इसे तब प्रदर्शित किया जाना चाहिए जब मैं अपनी संबंधित डेटा सूची वाले टेक्स्टफील्ड पर क्लिक करता हूं? जब मैं डेटा का चयन करता हूं और फिर से प्रकट होता हूं तो मैं गायब हो जाना चाहिए जब मैं अपनी संबंधित डेटा सूची के साथ एक अलग टेक्स्टफील्ड पर क्लिक करता हूं और इसी तरह।

मैं xcode के लिए नया हूं। किसी भी प्रकार के मदद की बहुत सराहना की जाएगी। धन्यवाद।

उत्तर

11

आप केवल एक पिकर व्यू का उपयोग कर सकते हैं जो कुछ स्थितियों के आधार पर अलग-अलग डेटा दिखाता है।

मेरा विचार निम्न है: आप 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]]; 
} 
0

1. टूलबार का उपयोग करें बारबटन इटिम के साथ, जिसे पिकर व्यू को छुपाया जाना चाहिए।

2. अब अपना टेक्स्ट फ़ील्ड टैग दें: textFiled1.tag=100; फिर इस टैग मान का उपयोग करके आपके पिकर व्यू सरणी को पॉप्युलेट करें।

3. जब उपयोगकर्ता pickerView से किसी भी मूल्य का चयन करता है, अपने प्रतिनिधि विधि में लिखने

if(textField.tag== @"Your Tag Value") 
{ 
     textField.text=[pickerArray objectAtIndex:row]; 
} 

मुझे लगता है कि आप अपने आप को कोड अब आप solution.Good किस्मत का सार है कि कोशिश कर सकते हैं, !!

1

इसका उपयोग करें।

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
    MyPickervie.delegate=self; 
} 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)myLocationPickerView; 
{ 
    return 1; 
} 

-(void)myLocationPickerView:(UIPickerView *)myLocationPickerView didSelectRow:   (NSInteger)row inComponent:(NSInteger)component; 
{ 

    switch(textfield.tag){ 
    Case 0: 
      label.text=[arraNo objectAtindex:row]; 
      break; 
    default: break; 
    } 
} 
-(NSInteger)myLocationPickerView:(UIPickerView *)myLocationPickerView numberOfRowsInComponent:(NSInteger)component; 
{ 

switch(textfield.tag){ 
    Case 0: 
      return [arrayNo count]; 
      break; 
    default: break; 
    } 
} 

-(NSString *)myLocationPickerView:(UIPickerView *)myLocationPickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
{ 
    switch(textfield.tag){ 
    Case 0: 
      return [arrayNo objectAtIndex:row]; 
      break; 
    default: break; 
    } 

} 

जहां आपको अलग-अलग सरणी को कॉल करने के लिए स्विच स्थिति में 8 मामले लेना है और इसे पिकर व्यू में सेट करना है।

+0

हाय, क्या आप textfield.tag क्या समझा सकते हैं? यह स्विच मामलों में टेक्स्टफील्ड अविकसित कहता है? और myLocationPickerView कौन सा label.text हम पाठ को सेट कर रहे हैं? –

+0

textfield.tag जहां आप अपने टेक्स्टफील्ड का उपयोग कर सकते हैं जिसे आपने .h फ़ाइल में घोषित किया है और इसे आईबीओटलेट करें। और picker व्यू से चयनित मान लेबल.टेक्स्ट का उपयोग कर लेबल में प्रदर्शित होता है। आप अपने लेबल या कुछ भी उपयोग कर सकते हैं जहां आप चयनित मूल्य प्रदर्शित करना चाहते हैं। –

1

मैंने इस कोड का परीक्षण 3 टेक्स्टफील्ड के साथ किया है।

और आपकी समस्या का सही समाधान मिला।

1) एक वैश्विक यूआईटीएक्स्टफाल्ड लें।

2) टेक्स्टफील्ड संपादन के प्रतिनिधि तरीके पर, वैश्विक टेक्स्टफील्ड को वर्तमान टेक्स्टफील्ड पर सेट करें।

3) पिकर मूल्य परिवर्तन विधि पर, वैश्विक टेक्स्टफील्ड का टेक्स्ट सेट करें और यह चयनित टेक्स्टफील्ड का मान बदल देगा।

नीचे कोड ठीक से काम कर रहा है।

कोडिंग का आनंद लें।

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView 
{ 
return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component 
{ 
return 10; 
} 

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
return [NSString stringWithFormat:@"Test %d",row + 1]; 

} 

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 

test.text = @"XYZ"; 

} 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
test = textField; 

return YES; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{  
[textField resignFirstResponder]; 

return YES; 
} 
+2

हाय, क्षमा करें मुझे आपके निर्देशों का पालन करने में कठिनाई हो रही है क्योंकि मैं एक्सकोड के लिए बिल्कुल नया हूं। क्या आप अपने दूसरे और तीसरे अंक को विस्तृत या समझा सकते हैं? –

+1

- (बूल) टेक्स्ट फ़ील्डशॉल्डबिनिंग संपादन: (यूआईटीएक्स्टफिल्ड *) टेक्स्टफिल्ड और - (बूल) टेक्स्ट फ़ील्डशल्डरेटर्न: (यूआईटीएक्स्टफिल्ड *) टेक्स्टफिल्ड यूआईटीएक्स्टफाल्ड के प्रतिनिधि तरीके हैं। कुंजीपटल दिखाने के लिए यह कुंजीपटल कार्यक्षमता का प्रबंधन करेगा। इस घटना में आप बस कीबोर्ड और वर्तमान पिकर छुपाएं। – Hemang

+2

और पिकर के लिए पहले 4 तरीके प्रतिनिधि विधियां हैं, जो पिकर की सभी मूलभूत कार्यक्षमताओं का प्रबंधन करेंगे। यानी पिकर में पंक्तियों की संख्या, पिकर में डेटा, पिकर मूल्य बदलने और अन्य चीजों के दौरान क्या करना है .... आपको दृश्य नियंत्रक के xib और .h फ़ाइल में प्रतिनिधियों को सेट करने की आवश्यकता है। – Hemang

संबंधित मुद्दे