Uitextfield is a control used to accept user input, which has the advantage of being flexible and can be entered casually, but sometimes it is a disadvantage. For us, a typical problem is format checking. However, we will also encounter the need to let the user enter the date, this time the format check is a bit of a fuss, after all, iOS has provided us with a uidatepicker for date selection, Such a natural idea is that when users click Uitextfield, the pop-up is not the keyboard, but our uidatepicker.
A simple way is to assign your own uidatepicker directly to the Inputview property of Uitextfield, which can also add additional views to it and is more convenient.
Here we use another method to achieve the following, that is, through the Uitextfield protocol. The benefit of this approach is that it gives us greater flexibility to customize the entire Inputview from pop-up to use to the end. Also be familiar with the understanding of the Uitextfield agreement.
Suppose we have multiple uitextfield, and then only one is required to select the date (multiple times can be identified by means of tag, etc.).
The first step, initialize.
The protocols for each Uitextfield are assigned, and then a separate tag value for the popup date selector is required (preferably all assigned, can be flexibly adjusted in conjunction with other needs), and then a uidatepicker space is initialized as well.
Example:
TextField self.testTimeField.delegate = self; Self.testNameField.delegate = self; Self.testLocationField.delegate = self; Self.testOtherField.delegate = self; Self.testTimeField.tag = 1001; Self.testNameField.returnKeyType = Uireturnkeydone; Self.testLocationField.returnKeyType = Uireturnkeydone; Self.testOtherField.returnKeyType = Uireturnkeydone; Uidatepicker self.datepicker = [[Uidatepicker alloc] init]; Self.datePicker.datePickerMode = Uidatepickermodedateandtime; Self.datePicker.minuteInterval = +; [Self.datepicker addtarget:self Action: @selector (choosedate:) forcontrolevents:uicontroleventvaluechanged];
Second, the implementation of the Uidatepicker event
The action we set here is valuechanged, which means that whenever the value of a date selector changes, that is, when the user chooses a new date, its bound event is triggered, so we assign a value to our Uitextfield's Text property in the method.
Example
-(void) Choosedate: (Uidatepicker *) Sender { NSDate *selecteddate = sender.date; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; Formatter.dateformat = @ "Yyyy-mm-dd hh:mm"; NSString *datestring = [formatter stringfromdate:selecteddate]; Self.testTimeField.text = datestring;}
The
third step, the implementation of the Uitextfield-textfieldshouldbeginediting: Method, in this method to handle the keyboard and Uidatepicker pop-up logic
The prototype of the method is-(BOOL) textfieldshouldbeginediting: (Uitextfield *) TextField; The return value is a Boolean type, and when Yes is returned the keyboard pops up and the keyboard does not eject when no is returned. That is, TextField will not be responded to. And all we have to do is return Yes when the TextField of the response is normal TextField, and the response TextField is to return no when the date selector pops up. How do you judge it? Do you remember the tag value we set previously? It's used here.
In addition, here are a few small problems: 1, pay attention to the timely hiding uidatepicker, that is, when the keyboard is displayed when it should not appear in the back, or the keyboard will be closed after you see a uidatepicker impressively stand on the screen.
2, similarly, will pop uiatepicker when the other keyboard (if in the response state) should also be closed, the two means that when the user from one TextField directly to another, our application should be able to correctly handle the keyboard and date selector relationship.
3, the application of animation. This is easier, so the date selector pops off like a keyboard.
Example:
#pragma mark-uitextfielddelegate-(BOOL) textfieldshouldbeginediting: (Uitextfield *) TextField {//If the keyboard is currently being displayed, then the UI DatePicker (if in view) hides if (textfield.tag! = 1001) {if (Self.datePicker.superview) {[Self.datepicker R Emovefromsuperview]; } return YES; }//uidatepicker and on the current view no longer display if (Self.datePicker.superview = = nil) {//close all keyboard or data pick Er visible currently [Self.testnamefield Resignfirstresponder]; [Self.testlocationfield Resignfirstresponder]; [Self.testotherfield Resignfirstresponder]; The Y coordinate is located at the bottom, for an animated display self.datePicker.frame = CGRectMake (0, Screen_height, screen_width, 216); [Self.view AddSubview:self.datePicker]; [UIView Beginanimations:nil Context:nil]; [UIView setanimationduration:0.3f]; [UIView Setanimationcurve:uiviewanimationcurveeaseout]; Self.datePicker.bottom-= Self.datePicker.height; [UIView CommiTanimations]; } return NO;
iOS Development--click the Uitextfield popup Uidatepicker protocol implementation method