2009-05-01 17 views
69

मेरे पास एक आईफोन डेटाबेस ऐप है जो एक तालिका से डेटा के साथ UIPickerView लोड करता है। मैं चयनित पंक्ति को किसी अन्य तालिका में डेटा से किसी विशेष पंक्ति पर सेट करना चाहता हूं।UIPickerView लोड होने के बाद पंक्ति का चयन करें

उदाहरण के लिए: मान लें कि मेरे पास UIPickerView है जो आईफोन उपयोगकर्ताओं के दोस्तों के नामों के साथ लोड किया गया है (नामों की संख्या परिवर्तनीय है, 1 या 1000 हो सकती है और सभी उपयोगकर्ता द्वारा डीबी में प्रवेश किए जाते हैं) । आईफोन उपयोगकर्ता के पास एक प्राथमिकता सेट है कि उनका वर्तमान सबसे अच्छा दोस्त टेड है। मैं प्रदर्शित होने पर UIPickerView टेड की स्थिति होने के लिए चाहता हूं।

मैं selectRow कहां कहूं?

मैंने viewDidAppear में कोशिश की लेकिन इसे कभी भी नहीं कहा गया था, titleForRow में जो सभी प्रकार के अजीब व्यवहार का कारण बनता था। viewDidLoad और viewWillAppear प्रश्न से बाहर हैं क्योंकि मुझे नहीं पता कि अभी तक पिकर को डेटासोर्स में क्या है।

अग्रिम धन्यवाद।

+0

बस डेटा लोड और देने के प्रतिनिधि के बाद अपने जवाब में @jab कोड डाल का उपयोग पर प्रकाश डाला। Thats मेरे लिए क्या काम किया! –

उत्तर

134

डेटा पुनर्प्राप्त करने के बाद इसे कॉल करें। मुझे नहीं पता कि आप डेटा कहां लोड करते हैं, इसलिए यह काम करने के लिए सिर्फ एक मजाक है। यदि यह मतलब नहीं है, मुझे पता है आप डेटा जहां लोड कर रहे हैं तो मैं यह मेरे सिर :)

-(void)viewDidLoad 
{ 
    // load data from sql 
    // self.someDataArray = DATAFROMSQL 
    [picker reloadAllComponents]; 
    [picker selectRow:0 inComponent:0 animated:YES]; 
} 
+0

धन्यवाद, मैं आपके मॉकअप की तरह हीडिडलोड में डेटा को पुनः प्राप्त कर रहा हूं। मुझे मैसेज इंडेक्स खोजने के लिए सूची के माध्यम से गणना करने के लिए एक विधि बनाना था और फिर पिकर सेट करना था। मैंने सोचा कि शायद मैं एक कॉलबैक खो रहा था जिसे पिकर लोड होने के बाद और इवेंट लूप पर लौटने से पहले इस्तेमाल किया जा सकता था। –

+0

यह काम करता है, लेकिन यह दृश्य लोड करने पर इतना अंतराल क्यों करता है? (एक टैब बार स्थिति में) – CularBytes

7

प्लेस इस में एक साथ टुकड़ा कर सकते हैं भी आप UIView कि आपके UIPickerView एक subview के रूप में शामिल है को प्रारंभ करते हैं:

[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO]; 
39

एक आम समस्या है जब एक (डिफ़ॉल्ट) UIPickerView आइटम को तब चुना जाना चाहिए जब UIPickerView प्रारंभ में दिखाया गया हो। समस्या घटनाओं के अनुक्रम से संबंधित है। पिछली पोस्ट पढ़ने से, ऐसा लगता है कि [pickerView selectRow: n] को सामान्य रूप से व्यू कंट्रोलर्स ViewDidLoad ईवेंट में बुलाया जाता है। हालांकि, UiPickerView डेटा केवल ViewDidLoad ईवेंट के बाद लोड किया गया है, जिसका अर्थ है ViewDidLoad में कोई भी चयन कोड का कोई प्रभाव नहीं पड़ेगा। उपाय करने के लिए, ViewDidAppear में चयन कोड रखें;

- (void) viewDidAppear:(BOOL)animated { 
[m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; } 
4

मुझे पता चला है कि 4.3 एसडीके पर घटक लोडिंग व्यवहार आईफोन और आईपैड के बीच अलग हैं। आईफोन पर, मैं selectRow का आह्वान करने वाला था: सबव्यू पदानुक्रम में जोड़ने से पहले या उसके बाद दृश्य को शुरू करने के ठीक बाद। हालांकि, आईपैड पर, selectRow कॉल ने कोई परिणाम नहीं दिया। मैं एक प्रदर्शन चयनकर्ता का उपयोग करके घायल हो गया: withObject: afterDelay: फायरिंग चुनने से पहले 0.1 सेकंड प्रतीक्षा करने के लिए कॉल करें पंक्ति में: कॉम्पोनेंट: एनिमेटेड:। आईफोन और आईपैड पर अनुमानित परिणाम थे।

0

यदि आप चाहते हैं कि चयनित पंक्ति स्थायी रूप से इस

myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor; 
1

तेजी के लिए यह बस

self.picker?.selectRow(0, inComponent: 0, animated: true) 
संबंधित मुद्दे