2009-05-25 15 views
23

मैं अपने आईफोन ऐप में UIPickerView की ऊंचाई को कम करना चाहता हूं, ताकि यह केवल एक पंक्ति और एक कॉलम दिखा सके। पिकर व्यू की ऊंचाई पंक्ति की ऊंचाई के बराबर होनी चाहिए।आप आईफोन पर यूआईपीकर व्यू को कैसे कम करते हैं?

मैं UIPickerView बनाने के लिए इंटरफ़ेस बिल्डर का उपयोग कर रहा हूं, लेकिन मुझे इस नियंत्रण को फिर से आकार देने का एक आसान तरीका नहीं मिल रहा है।

आप UIPickerView को कैसे संक्षिप्त करते हैं?

+0

एक UIScrollView की कोशिश करो और didScroll में: अगर स्क्रॉलिंग गति एक सीमा से नीचे चला जाता है प्रतिनिधि की विधि स्नैप करना है। – Dimitris

उत्तर

52

असल में, आप एक संलग्न दृश्य में एफ़िन ट्रांसफॉर्म लागू करके पूरे यूआईपीकर व्यू को थोड़ा सा छोटा कर सकते हैं। उदाहरण के लिए:

CGSize pickerSize = [pickerView sizeThatFits:CGSizeZero]; 

pickerTransformView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, pickerSize.width, pickerSize.height)]; 
pickerTransformView.transform = CGAffineTransformMakeScale(0.75f, 0.75f); 

[pickerTransformView addSubview:pickerView]; 
[self.view addSubview:pickerTransformView]; 
[pickerTransformView release]; 

एक युक्त दृश्य के भीतर रखकर और एक स्केलिंग उस दृश्य का बदलना लगाने से अपने मूल आकार के 75% करने के लिए एक पिकर पैमाने पर होगा। सीधे यूआईपीकर व्यू में एक ट्रांसफॉर्म लागू करने से अवांछनीय ड्राइंग कलाकृतियों की ओर जाता है।

हालांकि, आप जिस आकार का आकार बदल रहे हैं, उसे कस्टम नियंत्रण बनाकर सबसे अच्छा सेवा दी जाएगी।

+5

+1 मैंने पर्यवेक्षण में परिवर्तन को लागू करने के बारे में कभी नहीं सोचा है! मैंने हमेशा असंतोषजनक परिणामों के साथ pickerview पर इसे लागू करने का प्रयास किया है। अगर मैं कर सकता तो मैं इसे 10 बार बढ़ा दूंगा। –

+0

मैं इसे घुमाए जाने के बाद पिकर व्यू को स्पर्श ईवेंट भेजने की क्षमता खो रहा हूं। विचार? – Mark

+1

@mark - क्या आप वाकई चाहते हैं कि पिकर और उसके आस-पास के दृश्य अभी भी उनके शामिल दृश्य की सीमाओं के भीतर हैं? अगर वे पर्यवेक्षण के बाहर हैं, तो स्पर्श घटनाएं उन तक नहीं पहुंचेंगी। –

1

जहाँ तक मुझे पता है, अगर आप इसे कम करते हैं तो यह गड़बड़ हो जाएगा।

क) UITableView + UIPickerView
मैं तुम्हें "UITableView + UIPickerView में एक पंक्ति" का उपयोग करते हैं सलाह देते हैं। आप तालिका में एक पंक्ति का उपयोग कर सकते हैं Windows में ड्रॉपडाउनलिस्ट की तरह, जब आप इस पंक्ति पर टैप करेंगे तो pickerView (पहले छिपा हुआ) दिखाएगा।

ख) आप tableView में डेटा की एक लंबी सूची और आइटम का केवल एक ही डेटा लेने की जरूरत है, तो आप निम्न विधि (के रूप में यह होगा pickerView की मूल स्थिति की गणना करने के लिए सुनिश्चित करें का उपयोग कर दृश्य स्क्रॉल करना चाहिए एक साथ ऊपर और नीचे/ले जाया जा):


-(void)setViewMove:(BOOL)moveUP offset:(CGFloat)offset 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    CGRect rect = self.view.frame; 

    if(moveUP) 
    { 
     rect.origin.y-=offset; 
     rect.size.height+=offset; 
    } 
    else //move down 
    { 
     rect.origin.y+=offset; 
     rect.size.height-=offset; 
    } 
    self.view.frame = rect; 
    [UIView commitAnimations]; 
} 

ग) तुम भी पिकर के लिए एक और दृश्य जोड़ सकते हैं और इस दृश्य जब आप कुछ का चयन किया है करने के लिए वापस जा सकते हैं।

मेरा निष्कर्ष है:
यदि आपके पास तालिका दृश्य में केवल कुछ पंक्तियां हैं, तो एक का उपयोग करें।
यदि आपके पास टेबल व्यू में बहुत सी रेखाएं हैं लेकिन उनमें से केवल एक को पिकर की आवश्यकता है, तो बी का उपयोग करें।
यदि आपके पास टेबल व्यू में बहुत सी रेखाएं हैं और उनमें से बहुत से पिकर की आवश्यकता है, तो सी का उपयोग करें।

+0

एक तरीका है जिससे हम एक ड्रॉप डाउन चयनकर्ता बना सकते हैं जैसे कि हम वेब पेज –

+0

वेब पेजों में देखते हैं, ड्रॉप डाउन सूची मूल रूप से विंडोज प्लेटफॉर्म पर अन्य टूल्स द्वारा बनाई गई थी। ड्रॉपडाउनलिस्ट को देखने के लिए सफारी एक अद्वितीय नियंत्रण जोड़ता है, लेकिन ऐप्पल इसे एक्सकोड में नहीं जोड़ता है। –

3

यह संभव और आसान है!

बस सादे पाठ के रूप निब फ़ाइल खोलते हैं, तो पिकर दृश्य खोजने के लिए और उपायों को समायोजित:

<object class="IBUIPickerView" id="783900772"> 
<reference key="NSNextResponder" ref="191373211"/> 
<int key="NSvFlags">292</int> 
<string key="NSFrame">{{85, 68}, {150, 116}}</string> 

सब है कि!

+0

जब मैं बोल्ड टेक्स्ट जोड़ता हूं तो आप यहां लिखते हैं, कुछ भी नहीं होता है। इसलिए मैंने अगले आइटम -> NSFrameSize को {320, 116} (मूल रूप से 320, 216) में संशोधित किया। और यह काम करता है। –

+0

मैं {320, 130} पर "NSFrameSize" सेटिंग की अनुशंसा करता हूं क्योंकि यह पिकर के सूचक सहित शीर्ष 3 लाइनों को दिखाएगा। लेकिन साइड इफिक्ट यह है कि यह पिकर के नीचे फ्रेम नहीं दिखाएगा और उपयोगकर्ता शीर्ष 3 लाइनों के अलावा कुछ भी नहीं देख सकते हैं। –

+1

यह मेरे लिए कुछ भी नहीं बदल रहा है। – Bryan

1

इंटरफ़ेस बिल्डर में एक साधारण UIView बनाएं। वांछित स्थिति और आकार सेट करें, बाधाएं जोड़ें। "क्लिप उप दृश्य" चेकबॉक्स की जांच करें। फिर & एक दृश्य के रूप में इस दृश्य के अंदर पिकर व्यू ड्रॉप करें। कंटेनर के अंदर क्षैतिज और लंबवत संरेखित करने के लिए पिकर के लिए बाधाएं जोड़ें। नौकरी करना चाहिए

+0

स्पष्टीकरण के साथ कुछ उदाहरण बहुत अच्छा होगा। – Nilambar

+0

दुर्भाग्यवश मेरे स्टैक ओवरफ्लो खाते की "प्रतिष्ठा" मुझे छवियों को अपलोड करने की अनुमति न दें। अगर आप चाहें तो मैं आपको विवरण भेज सकता हूं। – user2248258

1

उपयोगकर्ता 2248258 का उत्तर वास्तव में काम करता है यदि आप स्टोरीबोर्ड और/या ऑटोलायआउट का उपयोग करते हैं। वहां मैं स्क्रीनशॉट जोड़ना चाहता हूं क्योंकि निलांबार ने सुझाव दिया था।

  1. जगह आकार के साथ एक और कंटेनर ध्यान में रखते हुए एक pickerview आप चाहते हैं यह Place a pickerview into another container view

  2. जांच कंटेनर दृश्य

  3. पिकर कि कंटेनर दृश्य में क्षैतिज और ऊर्ध्व रूप से केंद्रित संरेखित के लिए clipSubviews, पीछे की ओर और अग्रणी स्थान

के लिए इसे शून्य बाधाएं भी दें

इस तरह पिकर व्यू को सही आकार में बंद कर दिया जाता है (आकार में नहीं बदला जाएगा)।

परिणाम: enter image description here

+0

यह एक अच्छा सुझाव है, जो मैंने देखा या ठीक से फिट बैठता है। –

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