2008-10-18 13 views
38

मैं एक UIPickerView घटक में लगातार संख्याओं के एक समूह द्वारा प्रदर्शित की जाने लेकिन यह घड़ी-> टाइमर आवेदन की सेकंड घटक की तरह चारों ओर लपेट होगा। एकमात्र व्यवहार जिसे मैं सक्षम कर सकता हूं टाइमर एप्लिकेशन के घंटों के घटक की तरह दिखता है, जहां आप केवल एक ही दिशा में स्क्रॉल कर सकते हैं।आप कैसे UIPickerView घटक लपेटते हैं?

उत्तर

44

पंक्तियों की संख्या को बड़ी संख्या में सेट करना उतना ही आसान है, और इसे उच्च मूल्य पर शुरू करना आसान है, उपयोगकर्ता को बहुत लंबे समय तक पहिया को कभी भी स्क्रॉल करना होगा - और फिर भी, इससे भी बदतर यह होगा कि वे नीचे हिट करेंगे।

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    // Near-infinite number of rows. 
    return NSIntegerMax; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    // Row n is same as row (n modulo numberItems). 
    return [NSString stringWithFormat:@"%d", row % numberItems]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.pickerView = [[[UIPickerView alloc] initWithFrame:CGRectZero] autorelease]; 
    // ...set pickerView properties... Look at Apple's UICatalog sample code for a good example. 
    // Set current row to a large value (adjusted to current value if needed). 
    [pickerView selectRow:currentValue+100000 inComponent:0 animated:NO]; 
    [self.view addSubview:pickerView]; 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    NSInteger actualRow = row % numberItems; 
    // ... 
} 
+0

यह मेरे लिए ठीक काम किया! धन्यवाद। क्या कोई प्रदर्शन/स्मृति समस्याएं हैं? – Dimitris

+0

गैर-रैपिंग सूची की तुलना में कोई प्रदर्शन/स्मृति समस्या नहीं होनी चाहिए, क्योंकि ढांचा स्मृति में स्क्रॉल-ऑफ़ आइटम नहीं रखता है। यदि अनिश्चित है, तो प्रोफाइलर का उपयोग करें! – squelart

+1

यह कैसे घड़ी ऐप को लागू 'looping'.NSIntegerMax –

20

मैं अपने जवाब मिला:

http://forums.macrumors.com/showthread.php?p=6120638&highlight=UIPickerView#post6120638

यह एक पंक्ति के शीर्षक के लिए पूछता है, यह दे: कोड:

return [rows objectAtIndex:(row % [rows count])]; 

जब यह उपयोगकर्ता didSelectRow का कहना है: inComponent :, इस तरह कुछ उपयोग करें:

कोड:

//we want the selection to always be in the SECOND set (so that it looks like it has stuff before and after) 
if (row < [rows count] || row >= (2 * [rows count])) { 
    row = row % [rows count]; 
    row += [rows count]; 
    [pickerView selectRow:row inComponent:component animated:NO]; 
} 

ऐसा प्रतीत होता है कि UIPickerView मूल रूप से रैपिंग का समर्थन नहीं करता है, लेकिन आप प्रदर्शित होने के लिए डेटा के अधिक सेट डालने और जब पिकर बंद हो जाता है, तो डेटा सेट के बीच में घटक को केंद्रित करते हुए इसे मूर्ख बना सकते हैं।

+0

भयानक !! अनेक अनेक धन्यवाद !! अच्छा समाधान वास्तव में उपयोगी था – user1046037

0

बस एक बार कई बार बनाएं, ताकि आपके नंबर कई बार हो। आइए कहें कि 0 से 23 तक की संख्या कब चाहते हैं और इसे सरणी में रखें। हम

NSString *stdStepper; 

    for (int j = 0; j<10; j++) { 
     for(int i=0; i<24; i++) 
     { 
      stdStepper = [NSString stringWithFormat:@"%d", i]; 

      [_hoursArray addObject:stdStepper]; 

     } 
    } 

बाद में हम इस

[_hoursPickerView selectRow:120 inComponent:0 animated:NO]; 
0

तरह से चयनित सभी जवाब वास्तव में चक्रीय पिकर दृश्य स्क्रॉल नहीं कर रहे हैं पंक्ति 0 सेट 10 बार इस तरह ... क्या करेंगे कि।

मैं एक चक्रीय UIScrollView के आधार पर tableView बना दिया है। और इस तालिका के आधार पर, मैं UIPickerView को फिर से कार्यान्वित करता हूं। आपको इस DLPickerView में रुचि हो सकती है। और इस पिकर व्यू में सभी विशेषताएं हैं जो UIPickerView है, लेकिन कई नई सुविधाएं भी प्रदान करती हैं, और इस पिकर व्यू को कस्टम करना बहुत आसान है।

https://github.com/danleechina/DLPickerView

और वह इस DLPickerView चक्रीय पुस्तक वास्तव में चक्रीय स्क्रॉल है के बारे में पता होना। सभी जादू DLTableView की दूसरी कक्षा के कारण हुआ।

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

  • कोई संबंधित समस्या नहीं^_^