2009-08-14 13 views
14

के साथ आईफ़ोन कीबोर्ड को सुंदर ढंग से प्रतिस्थापित करें मेरे पास एक तालिका दृश्य है जिसने कुछ डेटा दर्ज करने के लिए UITextFields को एम्बेड किया है। इसमें दो अन्य फ़ील्ड भी हैं जो यूआईपीकर व्यू और यूआईडीएटीपीकर पॉपअप करते हैं - जैसा ऐप्पल से डेटसेल उदाहरण में दिखाया गया है।UIPickerView

अधिकांशतः यह काम करता है लेकिन मैं यह नहीं समझ सकता कि टेक्स्ट फ़ील्ड कीबोर्ड से दूसरे पिकर्स में साफ-सफाई कैसे करें - एक स्लाइड आउट, एक स्लाइड में - यह अजीब लगती है और तालिका दृश्य पर स्क्रॉल स्थिति कभी-कभी खराब हो जाती है ऊपर - सब कुछ ऊपर से स्क्रॉल के साथ।

मैं जो करना चाहता हूं वह टेक्स्ट फ़ील्ड कीबोर्ड को बिना एनिमेट किए बिना प्रतिस्थापित करता है और बिना टेबल आकार को पूर्ण आकार में बढ़ा देता है।

कोई सुराग?

उत्तर

31

सबसे पहले, यहां एक screencapture showing how this looks है।

UITextFieldDelegate को कार्यान्वित करें और एक "पॉपअप" प्रदर्शित करें जिसमें UIPickerView शामिल है।

- (void)textFieldDidEndEditing:(UITextField *)textField { 

    UIPickerView *picker = [[UIPickerView alloc] 
           initWithFrame:CGRectMake(0, 244, 320, 270)]; 
    picker.delegate = self; 
    picker.dataSource = self; 
    [self.view addSubview:picker]; 
    [picker release]; 
} 

जब कीबोर्ड गायब हो जाता है, तो एक पिकर दृश्य तब दिखाई देता है।

यदि आप इसे थोड़ा और लेना चाहते हैं, तो आप कीबोर्ड की तरह यूआईपीकर व्यू "स्लाइड इन" को एनिमेट कर सकते हैं।

- (void)viewDidLoad { 

    //picker exists in the view, but is outside visible range 
    picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 480, 320, 270)]; 
    picker.delegate = self; 
    picker.dataSource = self; 
    [self.view addSubview:picker]; 
    [picker release]; 
} 

//animate the picker into view 
- (void)textFieldDidEndEditing:(UITextField *)textField { 

    [UIView beginAnimations:@"picker" context:nil]; 
    [UIView setAnimationDuration:0.5]; 

    picker.transform = CGAffineTransformMakeTranslation(0,-236); 
    [UIView commitAnimations]; 

} 

//animate the picker out of view 
- (void)textFieldDidBeginEditing:(UITextField *)textField { 

    [UIView beginAnimations:@"picker" context:nil]; 
    [UIView setAnimationDuration:0.5]; 

    picker.transform = CGAffineTransformMakeTranslation(0,236); 
    [UIView commitAnimations]; 
} 

//just hide the keyboard in this example 
- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return NO; 
} 
+0

इस उत्तर के लिए धन्यवाद। – camilo

+12

बस एक नोट के रूप में, यह करने का यह पुराना तरीका है। एक और 'आधुनिक' संस्करण टेक्स्ट फ़ील्ड की इनपुट व्यू प्रॉपर्टी का उपयोग करेगा। –

29

बस UITextField की इनपुट दृश्य को UIPickerView पर सेट करें।

+0

रास्ता बेहतर है, लेकिन यह आईपैड पर सही नहीं दिखता है। – TMB

+0

मैं इस उत्तर को देखता हूं और इसे डेटपिकर शैली पर सेट नहीं करता हूं: http://stackoverflow.com/questions/4777237/iphone-datepicker-instead-of-keyboard – LordParsley

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