2012-11-28 9 views
6

बस स्पष्ट करने के लिए, मैं पूछ रहा हूं कि शुरुआत में एक बार पंक्ति ऊंचाई कैसे सेट करें जब UIpickerview स्थापित किया जा रहा है। मुझे पता है कि आप उस उद्देश्य के लिए pickerView: rowHeightForComponent का उपयोग करते हैं।मैं पूरे जीवनकाल में UIpickerview की पंक्ति ऊंचाई को गतिशील रूप से कैसे बदलूं?

हालांकि, मैं क्या पूछ रहा हूं कि अगर मैं पिकर व्यू चाहता हूं: rowHeightForComponent एक वैरिएबल वैल्यू वापस करने के लिए, जहां UIUickerview के जीवनकाल के दौरान मूल्य बदल सकता है, उदाहरण के लिए, किसी बटन के क्लिक के जवाब में या डिफॉल्ट में परिवर्तन सेटिंग।

मुझे पता चला कि, दुर्भाग्य से, pickerView: rowHeightForComponent केवल शुरुआत में ही कहा जाता है, जब आईओएस UIpickerview स्थापित कर रहा है। उसके बाद, यह कभी भी pickerView: rowHeightForComponent को कॉल नहीं करता है, इसलिए उस मूल्य में परिवर्तन नहीं उठा सकता है जो pickerView: rowHeightForComponent वापस लौटाएगा अगर इसे फिर से बुलाया जाता है।

मुझे लगता है कि मैं सिर्फ UIpickerview को रिलीज़ कर सकता हूं और एक और सेट अप कर सकता हूं, आईओएस को पिकर व्यू कॉल करने के लिए मजबूर कर रहा हूं: rowHeightForComponent फिर से, लेकिन यह असुविधाजनक हो सकता है, और राज्य की जानकारी को सहेजने की आवश्यकता हो सकती है। पंक्ति ऊंचाई को गतिशील रूप से बदलने के लिए, कोई और आसान तरीका है? धन्यवाद!

आसपास सर्च कर रहे हैं, मैं Changing UIPickerView row height पाया और How to change the size of row in UIPickerView by button click?, जो rowSizeForComponent विधि, जो सिर्फ पंक्ति की ऊँचाई के लिए एक कैश्ड मूल्य का उपयोग किया गया बारे में बात करती है (जो केवल पंक्ति की ऊँचाई की पहली बार सेटअप के लिए है)।

यहाँ कोड वाले हिस्से की पंक्ति की ऊँचाई बदलने का प्रयास है, एक साथ परीक्षण reloadAllComponents साथ: के रूप में @RileyE ने सुझाव दिया

NSLog(@"before, scrollviewSpacing is %d", self.mainViewController.IACscrollviewSpacing); 
if (0.0 != fromDefaultsScrollviewSpacing) { 
    self.mainViewController.IACscrollviewSpacing = (UInt8) round (60.0 - fromDefaultsScrollviewSpacing); 
} 
NSLog(@"now scrollviewSpacing is %d", self.mainViewController.IACscrollviewSpacing); 
NSLog(@"rowsizeforcomponent height is %f", [self.mainViewController.PickIPAddress rowSizeForComponent:1].height); 
[self.mainViewController.PickIPAddress reloadAllComponents]; 
NSLog(@"rowsizeforcomponent height is %f", [self.mainViewController.PickIPAddress rowSizeForComponent:1].height); 
[self.mainViewController.PickIPAddress reloadComponent:1]; 
NSLog(@"rowsizeforcomponent height is %f", [self.mainViewController.PickIPAddress rowSizeForComponent:1].height); 

जो कंसोल पर निम्न उत्पादन देता है:

2012 -11-29 02: 32: 14.681 आईपी एड्रेस कैलकुलेटर [6404: c07] इससे पहले, स्क्रॉलव्यू स्पेसिंग 39
2012-11-29 02: 32: 18.913 आईपी एड्रेस कैलकुलेटर [6404: c07] अब स्क्रॉलव्यू स्पेसिंग 22
2012- 1 1- 2 9 02: 32: 20.196 आईपी पता कैलकुलेटर [6404: सी07] rowsizeforcomponent ऊंचाई 39.000000 2012-11-29 02: 32: 28.865 आईपी पता कैलक्यूलेटर [6404: c07] rowsizeforcomponent ऊंचाई 39.000000 2012-11-29 02:32 : 30.903 आईपी पता कैलक्यूलेटर [6404: C07] rowsizeforcomponent ऊंचाई है 39,000000

और MainViewController (जो UIpickerviewdelegate है), मैं

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { 
return self.IACscrollviewSpacing; } 

इसके अलावा, मैं एक ब्रेकपाइंट यहां सेट है, और मैं देख रहा हूँ में यह केवल तब कहा जाता है जब UIPickerview शुरू में स्थापित किया जा रहा है, और फिर कभी नहीं।

+0

क्या आप कह रहे हैं कि 'rowHeightForComponent:' को फिर से कॉल किया जाता है यदि आप पिकर व्यू पर 'reloadComponent:' कहते हैं? – rmaddy

+0

मैं कह रहा हूं कि reloadAllComponents: rowHeightForComponent को कॉल नहीं करता है: फिर, जो मेरे लिए एक समस्या है। यदि ऐसा होता है, तो यह पंक्ति मान के लिए उपयोग करने के लिए नया मान उठाएगा। – auspicious99

+0

क्षमा करें, मेरे पास एक टाइपो था। मेरा मतलब था "नहीं कहा जाता है", नहीं "कहा जाता है"। आपने अभी पुष्टि की है। यह अप्रत्याशित है। – rmaddy

उत्तर

0

सभी प्रतिनिधि तरीकों फिर से फोन किया और अद्यतन जब आप कॉल [yourPicker reloadAllComponents];

चेक बाहर UIPickerView और UIPickerViewDelegate डॉक्स कर रहे हैं। विशेष रूप से "व्यू पिकर को फिर से लोड करना" अनुभाग देखें।

+0

फिर से प्रश्न पढ़ें। यह टेबल दृश्यों के बारे में नहीं है। – rmaddy

+0

धन्यवाद, लेकिन यह UIUickerview है, UI UIviewview नहीं। कोई रीलोडडेटा विधि नहीं है। ReloadAllComponents या reloadComponent है: लेकिन ये केवल डेटा को फिर से पढ़ते हैं (UIpickerviewdatasource प्रोटोकॉल विधियों), और UIpickerviewDelegate प्रोटोकॉल विधियों को कॉल न करें (कम से कम, pickerView: rowHeightForComponent नहीं)। – auspicious99

+0

@ auspicious99 ठीक है। खैर, मैंने अपना प्रश्न अपडेट कर लिया है। – RileyE

0

मुझे यकीन नहीं है कि UIPickerView गतिशील रूप से पंक्ति ऊंचाई बदल सकता है।

लेकिन मैंने एक पिकर व्यू नाम DLPickerView लागू किया। आप अलग-अलग पंक्ति के लिए अलग-अलग ऊंचाई वापस कर सकते हैं।सैद्धांतिक रूप से यह पूरे जीवनकाल में पंक्ति ऊंचाई को भी बदल सकता है

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