2012-10-10 19 views
21

पर डेटपिकर दिखाएं मैं आईओएस के लिए बहुत नया हूं इसलिए स्पष्ट रूप से मुझे इस समस्या का पालन करने की कोशिश करते समय कुछ अवधारणाएं याद आ रही हैं Display datepicker on tapping on textfield मेरी समस्या के लिए।टेक्स्टफील्ड टैप

मैं इंटरफेस और एक वर्ग DatepickerAppDelegate बुलाया में कार्यान्वयन है, लेकिन मैं यहाँ खो रहा हूँ:

"XIB में, एक UIToolbar और एक UIDatePicker बाहर खींच लेकिन देखने के लिए देते नहीं है। आउटलेट को उचित रूप से कनेक्ट करें। दिनांक बदल गया: दिनांक पिकर में किए गए परिवर्तनों का जवाब देता है और किया गया संपादन: कॉल बार में संपन्न बटन क्लिक होने पर कॉल किया जाता है। उन्हें भी कनेक्ट करें। विधियों को नीचे सूचीबद्ध के रूप में लागू किया गया है। "

मैंने एक्सआईबी के बारे में कुछ पढ़ा लेकिन मैं एक स्टोरीबोर्ड का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि मेरे पास तब नहीं है। साथ ही, मुझे यकीन नहीं है कि मुझे अपने व्यू कंट्रोलर को अटैच किए बिना तत्वों को खींचने के लिए कैसे माना जाता है (मैं कोशिश कर रहा हूं, लेकिन जब मैं माउस बटन छोड़ता हूं, टूल टूलबार पर वापस आ जाता है), और मैं ' यह भी समझ में नहीं आता कि मुझे यूआईटीयूएलबार क्यों चाहिए।

और आखिरकार, मैं अपने टेक्स्टफील्ड को डेटपिकर प्रतिनिधि से कैसे जोड़ूं?

क्या कोई मेरी मदद कर सकता है?

अद्यतन:

datePicker = [[UIDatePicker alloc] init]; 
datePicker.datePickerMode = UIDatePickerModeDate; 
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; 

self.birthday.inputView = datePicker; 

उत्तर

51

UIResponder के लिए, जिसमें से UITextField इनहेरिट करती है, defines a property called inputView। यह गुण (UIView *) एक दृश्य को परिभाषित कर सकता है जो कीबोर्ड के बजाय प्रदर्शित किया जाएगा जब UIResponder पहला उत्तरदाता बन जाएगा।जब आपके UITextField

UIDatePicker *datePicker = [[UIDatePicker alloc] init...]; 
... configure datePicker ... 

[myTextField setInputView:datePicker]; 

अब,:

इस प्रकार, यदि आप एक UIDatePicker चाहते हैं जब आप किसी पाठ फ़ील्ड में नल प्रकट करने के लिए (यानी, आप उस पाठ फ़ील्ड पहले प्रत्युत्तर बनाने), तो आप, भोलेपन से कह सकते हैं टैप किया गया है, UIDatePicker इसके बजाए लाया जाएगा।

हालांकि

आप इस से अधिक करने के लिए है, क्योंकि आप अलग झुकाव और विभिन्न मुहावरों को प्रबंधित करना होगा चाहते हैं।

लेकिन यह मूल विचार है।

+0

के एक आउटलेट है, लेकिन मैं के बाद अद्यतन करने के लिए भूल गया था। – lolol

+0

मैंने इस उत्तर के आधार पर एक ओपन सोर्स क्लास, [STADATEField] (https://github.com/Stunner/STAControls/blob/master/STAControls/STAControls/TextField/STADateField.h) लिखा था। – Stunner

0

हुए अपने दृश्य पर एक datepicker देख सकते हैं और uitoolbarview जोड़ें:

वास्तव में यह बहुत ही सरल, मैं सिर्फ करने की जरूरत है। उदाहरण

CGFloat toolbarHeight = 44.f; 
CGFloat datePickerHeight = 140.f; 
CGFloat containerViewHeight = toolbarHeight+datePickerHeight; 
//create container view for datepicker and toolbar 
UIView *containerView = [[UIVIew alloc] initWithFrame:CGRectMake(0.f, [self.view bounds].size.height+containerViewHeight, [self.view bounds].size.width, containerViewHeight)]; 

//after init toolbar set the frame 
toolBar.frame = CGRectMake(0.f,0.f,containerView.frame.size.width, toolbarHeight]; 
//then add on toolbar button save and release it after add 

//after init datePicker set the frame 
datePicker.frame = CGRectMake(0.f, toolbarHeight, containerView.frame.size.width, datePickerHeight); 

//add datePicker and toolBar to containerView 
[containerView addSubview: toolBar]; 
[containerView addSubview: datePicker]; 

[toolBar release]; 
[datePicker release]; 

//add containerView to main view 

[self.view addSubview: containerView]; 
[containerView release]; 

के लिए तो जब दृश्य लोड वे कर रहे हैं contener देखने के वाई छिपा दिया जाएगा किया आपके विचार फ्रेम के बाहर है।

अब आप UITextFieldDelegate

textfield.delegate = self; 

की संपत्ति किसी प्रकार करना चाहिए प्रतिनिधि textFieldDidBeginEditing की विधि मेंUITextFieldDelegate देखते हैं कि आप विधि है कि आपके datepicker और उपकरण पट्टी दिखाई देगा सक्रिय होना चाहिए। आप जो उपयोग का चयन किया गया टैग संपत्ति है, जो पूर्णांक है परिभाषित करने के लिए कई टेक्स्ट फ़ील्ड है और आप स्विच के बजाय कई अगर शर्तों का उपयोग कर सकते हैं।

अपनी तिथि दिखाने के लिए पिकर और टूलबार आपको कंटेनर व्यू फ्रेम के वाई को बदलना चाहिए। यहाँ कैसे

CGRect containerViewFrame = containerView.frame; 
containerViewFrame.y -=containerViewHeight; 
containerView.frame = containerViewFrame; 

सिर्फ प्लस containerViewHeight चर को छुपाने के लिए ऐसा करने के लिए है। आप कुछ एनीमेशन के साथ दिखाने के लिए UIViewAnimations का उपयोग कर सकते हैं। उदाहरण UIViewAnimationCurveEaseInOut

20

की viewDidLoad में ViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIDatePicker *datePicker = [[UIDatePicker alloc]init]; 
    [datePicker setDate:[NSDate date]]; 
    datePicker.datePickerMode = UIDatePickerModeDate; 
    [datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged]; 
    [txtFieldBranchYear setInputView:datePicker]; 
} 

एक जोड़े (और तुम UIDatePicker ऊपर एक उपकरण पट्टी चाहते हैं, कि क्या inputAccessoryView संपत्ति के लिए ... है) आपके व्यू कंट्रोलर में विधि

-(void) dateTextField:(id)sender 
{ 
    UIDatePicker *picker = (UIDatePicker*)txtFieldBranchYear.inputView; 
    [picker setMaximumDate:[NSDate date]]; 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    NSDate *eventDate = picker.date; 
    [dateFormat setDateFormat:@"dd/MM/yyyy"]; 

    NSString *dateString = [dateFormat stringFromDate:eventDate]; 
    txtFieldBranchYear.text = [NSString stringWithFormat:@"%@",dateString]; 
} 

txtFieldBranchYearहै कि मैं वास्तव में क्या किया था UITextField

+0

ग्रेट उत्तर। बस एक सरलीकरण: 'txtFieldBranchYear.text = dateString;' नौकरी भी करनी चाहिए। –

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