Add calendar to text box click in ios

I am very new to iOS development. I need to add a calender on click UITextField . How to add a custom calendar as I do not want to add a UIDatePicker .

+4
source share
3 answers

Firstly, there are many ways to implement a calendar. But most fill out and easily get the TapkuLibrary calendar http://github.com/devinross/tapkulibrary , and then implement this TapkuLibrary in your class file. After implementing the following code to display the calendar

headerFile.h

 #import <UIKit/UIKit.h> #import "Libraries/TapkuLibrary/TKCalendarMonthView.h" @interface calendarViewController : UIViewController<TKCalendarMonthViewDelegate,TKCalendarMonthViewDataSource, UITextFieldDelegate> { TKCalendarMonthView *calendar; UITextField *txtField; } @property(nonatomic,retain)UITextField *txtField; 

@end

implementationFile.h

// @ synthesize ..............

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { [self doAddAction]; return YES; } -(void)doAddAction { calendar=[[TKCalendarMonthView alloc] init]; calendar.frame=CGRectMake(0,0,calendar.frame.size.width,calendar.frame.size.height); calendar.delegate=self; calendar.dataSource=self; [self.view addSubview:calendar]; } #pragma mark - #pragma mark TKCalendarMonthViewDelegate methods - (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)d { NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init]; [objDateFormatter setDateFormat:@"dd-MM-yyyy"]; NSLog(@"%@",[objDateFormatter stringFromDate:d]); } - (void)calendarMonthView:(TKCalendarMonthView *)monthView monthDidChange:(NSDate *)d { NSLog(@"calendarMonthView monthDidChange"); } #pragma mark - #pragma mark TKCalendarMonthViewDataSource methods - (NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView marksFromDate:(NSDate *)startDate toDate:(NSDate *)lastDate { NSLog(@"calendarMonthView marksFromDate toDate"); NSLog(@"Make sure to update 'data' variable to pull from CoreData, website, User Defaults, or some other source."); // When testing initially you will have to update the dates in this array so they are visible at the // time frame you are testing the code. NSArray *data = [NSArray arrayWithObjects: @"2011-01-01 00:00:00 +0000", @"2011-01-09 00:00:00 +0000", @"2011-01-22 00:00:00 +0000", @"2011-01-10 00:00:00 +0000", @"2011-01-11 00:00:00 +0000", @"2011-01-12 00:00:00 +0000", @"2011-01-15 00:00:00 +0000", @"2011-01-28 00:00:00 +0000", @"2011-01-04 00:00:00 +0000", @"2011-01-16 00:00:00 +0000", @"2011-01-18 00:00:00 +0000", @"2011-01-19 00:00:00 +0000", @"2011-01-23 00:00:00 +0000", @"2011-01-24 00:00:00 +0000", @"2011-01-25 00:00:00 +0000", @"2011-02-01 00:00:00 +0000", @"2011-03-01 00:00:00 +0000", @"2011-04-01 00:00:00 +0000", @"2011-05-01 00:00:00 +0000", @"2011-06-01 00:00:00 +0000", @"2011-07-01 00:00:00 +0000", @"2011-08-01 00:00:00 +0000", @"2011-09-01 00:00:00 +0000", @"2011-10-01 00:00:00 +0000", @"2011-11-01 00:00:00 +0000", @"2011-12-01 00:00:00 +0000", nil]; // Initialise empty marks array, this will be populated with TRUE/FALSE in order for each day a marker should be placed on. NSMutableArray *marks = [NSMutableArray array]; // Initialise calendar to current type and set the timezone to never have daylight saving NSCalendar *cal = [NSCalendar currentCalendar]; [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; // Construct DateComponents based on startDate so the iterating date can be created. // Its massively important to do this assigning via the NSCalendar and NSDateComponents because of daylight saving has been removed // with the timezone that was set above. If you just used "startDate" directly (ie, NSDate *date = startDate;) as the first // iterating date then times would go up and down based on daylight savings. NSDateComponents *comp = [cal components:(NSMonthCalendarUnit | NSMinuteCalendarUnit | NSYearCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSSecondCalendarUnit) fromDate:startDate]; NSDate *d = [cal dateFromComponents:comp]; // Init offset components to increment days in the loop by one each time NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; [offsetComponents setDay:1]; // for each date between start date and end date check if they exist in the data array while (YES) { // Is the date beyond the last date? If so, exit the loop. // NSOrderedDescending = the left value is greater than the right if ([d compare:lastDate] == NSOrderedDescending) { break; } // If the date is in the data array, add it to the marks array, else don't if ([data containsObject:[d description]]) { [marks addObject:[NSNumber numberWithBool:YES]]; } else { [marks addObject:[NSNumber numberWithBool:NO]]; } // Increment day using offset components (ie, 1 day in this instance) d = [cal dateByAddingComponents:offsetComponents toDate:d options:0]; } [offsetComponents release]; return [NSArray arrayWithArray:marks]; } 
+4
source

I think you want to add a calendar, but not through a date picker? So, here are some links ... please check them out, I think they will solve your problem.

http://www.cocoacontrols.com/platforms/ios/controls/occalendar

http://www.cocoacontrols.com/platforms/ios/controls/pmcalendar

http://www.cocoacontrols.com/platforms/ios/controls/ckcalendar

They include various types of calendars made to order .. Any problem, please let me know :)

0
source

It is shocking that there is no built-in calendar controller, but no. I really expected them to add one of EventKit in iOS4, but no. Kalu is a little difficult to plunge, but as soon as you understand how he thinks, it is quite easy to implement.

http://github.com/klazuka/Kal

view the entire library for the Calendar at this link ...

http://www.cocoacontrols.com/search?utf8=%E2%9C%93&q=Calendar

and see this tapku library in its very useful library.

http://maniacdev.com/2011/09/tutorial-using-the-tapku-library-to-create-an-elegant-marked-calendar/

you can also fire the textFieldDidBeginEditing: event textFieldDidBeginEditing:

:)

0
source

Source: https://habr.com/ru/post/1439364/


All Articles