Date Picker - show time between two dates (UIDatePickerModeDateAndTime) - ios

I'm currently showing a Date Picker of the kind UIDatePickerModeCountDownTimer that uses:
- (UIDatePicker *)datePicker {
if (!_datePicker) {
_datePicker = [[UIDatePicker alloc] init];
_datePicker.datePickerMode = UIDatePickerModeCountDownTimer;
_datePicker.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.8];
}
return _datePicker;
}
- (void)setDuration:(NSTimeInterval)duration {
_duration = duration;
self.datePicker.countDownDuration = _duration;
}
... date picker, and shows (in a label) the time from current date to date chosen in future with:
- (void)update {
if (self.time) {
[self setImage:nil forState:UIControlStateNormal];
NSString *title;
NSTimeInterval timeInterval = [self.time doubleValue];
if (self.ticking) {
NSMutableString *dateFormat = [[NSMutableString alloc] init];
if (timeInterval < 0) {
[dateFormat appendString:#"-"];
}
if (fabsf(timeInterval) > 60 * 60) {
[dateFormat appendString:#"hh:"];
}
[dateFormat appendString:#"mm:ss"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = dateFormat;
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
title = [formatter stringFromDate:date];
if ([self.time integerValue] > 0) {
self.circleView.backgroundColor = [UIColor colorWithRed:0.373 green:0.702 blue:0.522 alpha:1];
} else {
self.circleView.backgroundColor = [UIColor colorWithRed:0.820 green:0.373 blue:0.424 alpha:1];
}
} else {
NSMutableString *text = [[NSMutableString alloc] init];
if (fabsf(timeInterval) < 60) {
// Show seconds
[text appendFormat:#"%.0fs", timeInterval];
} else if (fabsf(timeInterval) < 60 * 60) {
// Show minutes
[text appendFormat:#"%.0fm", floorf(timeInterval / 60)];
} else {
// Show hours
[text appendFormat:#"%.0fh", floorf(timeInterval / 60 / 60)];
}
title = text;
self.circleView.backgroundColor = [UIColor colorWithWhite:1.0f alpha:0.2];
}
[self setTitle:title forState:UIControlStateNormal];
return;
}
[self setTitle:nil forState:UIControlStateNormal];
[self setImage:[UIImage imageNamed:#"plus"] forState:UIControlStateNormal];
self.circleView.backgroundColor = [UIColor colorWithWhite:1.0f alpha:0.05];
}
... but I switched the DatePicker to UIDatePickerModeDateAndTime and need to figure out how to update my update method with it.
I need to show month/day in addition to hour/minute/second in the label.

If you want a method like delegate, then this can help you..
Add target to your date picker....
[myDatePicker addTarget:self action:#selector(onPickerValueChanged:) forControlEvents:UIControlEventValueChanged];
Remove target in dealloc. Otherwise if your picker is scrolling and viewController is popped, app will crash.
- (void dealloc
{
[myPicker removeTarget:self action:#selector(onPickerValueChanged:) forControlEvents:UIControlEventValueChanged];
[myPicker release];//FOR NON ARC
[super dealloc];//FOR NON ARC
}
Implement value Change like
- (IBAction)onPickerValueChanged:(id)sender
{
[self update];
}

Related

UIDatePicker in tableview can't be changed sometimes

sometimes I have problems with the UIDatePicker. I built a screen with a UITableView where I can set a start time and an end time for each day of the week.
Now, however, I have the strange behavior that the picker sometimes does not allow a change. It is grayed out but not disabled. When I turn the picker it moves, but when I let go, it automatically returns to its previous value.
The behavior is reproducible. I change one day and close the picker. Change another day and close the picker. Then I scroll down a bit, the tableview jerking slightly. If I now open the last changed picker I have the mentioned behavior. I noticed the behavior on iOS 9 to 11 and on different devices.
For a better understanding, I have created a screenshot.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = #"timeProfilSettingsCell";
TimeProfilSettingsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSDate *dateValidFrom = nil;
NSDate *dateValidUntil = nil;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"HH:mm"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:#"UTC"]];
if (cell == nil)
{
[tableView registerNib:[UINib nibWithNibName:#"TimeProfilSettingsCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
}
TimeInterval *timeInterval = [nma_currentTimeInterval objectAtIndex:indexPath.row];
if (timeInterval.ni_validFrom == TIMEPROFIL_VALUE_ALWAYS_VALID_FROM && timeInterval.ni_validUntil == TIMEPROFIL_VALUE_ALWAYS_VALID_UNTIL && timeInterval.ni_timeIntervalWeekdayActive == 1)
{
[cell.checkBoxImageView setImage:[UIImage imageNamed:#"IconHakenBlau"]];
}
else if (timeInterval.ni_timeIntervalWeekdayActive == 1)
{
[cell.checkBoxImageView setImage:[UIImage imageNamed:#"Clock_blue"]];
}
else
{
[cell.checkBoxImageView setImage:[UIImage imageNamed:#"IconOvalBlau"]];
}
cell.separatorView.backgroundColor = [UIColor colorWithRed:227.0/255.0 green:227.0/255.0 blue:227.0/255.0 alpha:1.0];
cell.weekDayLabel.text = [self getWeekDayName:indexPath.row];
[cell.checkBoxButton addTarget:self action:#selector(checkBoxButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[cell.checkBoxButton setTag:indexPath.row];
cell.validityLabel.textColor = [UIColor colorWithRed:123.0/255.0 green:164.0/255.0 blue:219.0/255.0 alpha:1.0];
[cell.validityButton addTarget:self action:#selector(validityButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[cell.validityButton setTag:indexPath.row];
// Handling so that the picker is closed when it is clicked elsewhere
UITapGestureRecognizer *tapGestureRecognize = [[UITapGestureRecognizer alloc] initWithTarget:self action:#selector(dismissDatePicker:)];
tapGestureRecognize.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapGestureRecognize];
BOOL b_open = NO;
if (b_pickerVisible && ni_touchedRow == indexPath.row)
{
b_open = YES;
cell.b_validityPickerVisible = YES;
[cell.validityStartPicker setHidden:NO];
[cell.validityStartPicker setEnabled:YES];
[cell.validityEndPicker setHidden:NO];
[cell.validityEndPicker setEnabled:YES];
cell.validityFromLabel.hidden = NO;
[cell.separatorView setFrame:CGRectMake(cell.separatorView.frame.origin.x, 304, cell.separatorView.frame.size.width, cell.separatorView.frame.size.height)];
[cell.validityStartPicker setTimeZone:[NSTimeZone timeZoneWithName:#"UTC"]];
[cell.validityEndPicker setTimeZone:[NSTimeZone timeZoneWithName:#"UTC"]];
[cell.validityStartPicker addTarget:self action:#selector(updateValidityStartPicker:) forControlEvents:UIControlEventValueChanged];
[cell.validityEndPicker addTarget:self action:#selector(updateValidityEndPicker:) forControlEvents:UIControlEventValueChanged];
if (b_pickerJustOpened)
{
b_pickerJustOpened = NO;
if (tableView.contentOffset.y > 0)
{
tableView.contentOffset = CGPointMake(0, tableView.contentOffset.y + 102);
}
}
if (b_pickerValueChanged)
{
// Picker-value not changed
}
else if (timeInterval.ni_validFrom == TIMEPROFIL_VALUE_INVALID && timeInterval.ni_validUntil == TIMEPROFIL_VALUE_INVALID)
{
// Default value, if the entry was previously "not"
[cell.validityStartPicker setDate:[NSDate dateWithTimeIntervalSince1970:0x20 /* 8:00 */ * 900 /* 15 Minuten x 60 Sekunden */] animated:NO];
[cell.validityEndPicker setDate:[NSDate dateWithTimeIntervalSince1970:0x40 /* 16:00 */ * 900 /* 15 Minuten x 60 Sekunden */] animated:NO];
b_pickerValueChanged = YES;
[cell.validityLabel setTextColor:[UIColor redColor]];
}
else
{
[cell.validityStartPicker setDate:[NSDate dateWithTimeIntervalSince1970:timeInterval.ni_validFrom * 900 /* 15 Minuten x 60 Sekunden */] animated:NO];
[cell.validityEndPicker setDate:[NSDate dateWithTimeIntervalSince1970:(timeInterval.ni_validUntil + 1 /* +1 aufrunden auf die volle viertel Stunde*/) * 900 /* 15 Minuten x 60 Sekunden */] animated:NO];
}
}
else
{
cell.b_validityPickerVisible = NO;
cell.validityStartPicker.hidden = YES;
cell.validityEndPicker.hidden = YES;
cell.validityFromLabel.hidden = YES;
[cell.validityStartPicker setEnabled:YES];
[cell.validityEndPicker setEnabled:YES];
[cell.separatorView setFrame:CGRectMake(cell.separatorView.frame.origin.x, 88, cell.separatorView.frame.size.width, cell.separatorView.frame.size.height)];
}
if (b_pickerValueChanged && ni_touchedRow == indexPath.row)
{
if ([[dateFormatter stringFromDate:[cell.validityEndPicker date]] isEqualToString:#"00:00"])
{
cell.validityLabel.text = [NSString stringWithFormat:#"%# - 23:59:59 %# >", [dateFormatter stringFromDate:[cell.validityStartPicker date]], NSLocalizedString(#"oClock", nil)];
}
else
{
cell.validityLabel.text = [NSString stringWithFormat:#"%# - %# %# >", [dateFormatter stringFromDate:[cell.validityStartPicker date]], [dateFormatter stringFromDate:[cell.validityEndPicker date]], NSLocalizedString(#"oClock", nil)];
}
[cell.validityLabel setTextColor:[UIColor redColor]];
}
else if ((timeInterval.ni_validFrom == TIMEPROFIL_VALUE_ALWAYS_VALID_FROM && timeInterval.ni_validUntil == TIMEPROFIL_VALUE_ALWAYS_VALID_UNTIL && timeInterval.ni_timeIntervalWeekdayActive == 1) || (ni_flagTimeIntervalActive == 0 && timeInterval.ni_timeIntervalWeekdayActive == 1))
{
cell.validityLabel.text = NSLocalizedString(#"Always", nil);
}
else if (timeInterval.ni_validFrom == TIMEPROFIL_VALUE_INVALID || timeInterval.ni_validUntil == TIMEPROFIL_VALUE_INVALID)
{
cell.validityLabel.text = NSLocalizedString(#"Not", nil);
}
else
{
timeInterval.ni_timeIntervalWeekdayActive = 1;
dateValidFrom = [NSDate dateWithTimeIntervalSince1970:timeInterval.ni_validFrom * 900 /* 15 Minuten x 60 Sekunden */];
dateValidUntil = [NSDate dateWithTimeIntervalSince1970:(timeInterval.ni_validUntil + 1 /* +1 aufrunden auf die volle viertel Stunde*/) * 900 /* 15 Minuten x 60 Sekunden */];
if (timeInterval.ni_validUntil == TIMEPROFIL_VALUE_ALWAYS_VALID_UNTIL)
{
cell.validityLabel.text = [NSString stringWithFormat:#"%# - 23:59:59 %#", [dateFormatter stringFromDate:dateValidFrom], NSLocalizedString(#"oClock", nil)];
}
else
{
cell.validityLabel.text = [NSString stringWithFormat:#"%# - %# %#", [dateFormatter stringFromDate:dateValidFrom], [dateFormatter stringFromDate:dateValidUntil], NSLocalizedString(#"oClock", nil)];
}
}
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
return cell;
}
I have extracted the part of the code into a project and made it available for download.
I hope someone has an idea.
Thanks for your help
Finally I found a solution for the problem. After setting the locale in the code the picker didn't block.
Here ist the code I added after setTimeZone: in my code.
[cell.validityStartPicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale currentLocale] localeIdentifier]]];
[cell.validityEndPicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale currentLocale] localeIdentifier]]];

How to modify selected UITexFiled value in Array of Textfield

Currently, I created Array of UITextField based on Response from Server in my UI, My response contains three types of response in single API, i.e I get 5 key and Values. Values contains Types like String, Date, Array, based on this when I select the UITextFiled the value must change according to that Particular TextFiled
Here my Sample Code:
for (int i=0;i<itemAttributeArray.count;i++){
UIColor *floatingLabelColor = [UIColor brownColor];
textField1 = [[JVFloatLabeledTextField alloc] initWithFrame:CGRectMake(16, y, width, height)];
textField1.delegate = self;
//Set tag 101
textField1.tag = 101;
NSLog(#"textField1.tag - %ld",(long)textField1.tag);
textField1.text = [[itemAttributeArray valueForKey:#"value"]objectAtIndex:i];
[self SetTextFieldBorder:textField1];
textField1.placeholder = [keyArr objectAtIndex:i];
textField1.font = [UIFont systemFontOfSize:kJVFieldFontSize];
// textField1.clearsOnBeginEditing = YES;
textField1.clearButtonMode = UITextFieldViewModeWhileEditing;
textField1.floatingLabelFont = [UIFont boldSystemFontOfSize:kJVFieldFloatingLabelFontSize];
textField1.floatingLabelTextColor = floatingLabelColor;
// textField1.translatesAutoresizingMaskIntoConstraints = NO;
[textField1 resignFirstResponder];
[_scroll addSubview:textField1];
[textFields addObject:textField1];
[textField1 release];
y += height + margin;
if ([[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i] isEqualToString:#"string"]){
NSLog(#"type - %#",[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i]);
}else if ([[[itemAttributeArray valueForKey:#"type"]
objectAtIndex:i] isEqualToString:#"date"]){
NSLog(#"type - %#",[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i]);
textField1.tag = 102;
[textField1 addTarget:self action:#selector(textFieldDidChange_dateChek)
forControlEvents:UIControlEventEditingDidBegin];
}else if ([[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i] isEqualToString:#"double"]){
NSLog(#"type - %#",[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i]);
}
-(void)textFieldDidChange_dateChek{
NSLog(#"iam called on first edit");
_picker_uiView.hidden = false;
[_datePickerView addTarget:self action:#selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
}
- (void)datePickerValueChanged:(id)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"h:mm a"];
textField1.text = [dateFormatter
stringFromDate:_datePickerView.date];
}
When I select the date value is entered in the last object to UITextfield but I selected index is 2nd but values changing on the last element of UITextfield
you are create the textfield in globally, thats the reason you get the last index only. in here assign the tag for each textfield as well as create the instance value.for e.g
for (int i=0;i<itemAttributeArray.count;i++){
UIColor *floatingLabelColor = [UIColor brownColor];
JVFloatLabeledTextField *textField1 = [[JVFloatLabeledTextField alloc] initWithFrame:CGRectMake(16, y, width, height)];
textField1.delegate = self;
//Set tag 101
textField1.tag = 101 + i;
NSLog(#"textField1.tag - %ld",(long)textField1.tag);
textField1.text = [[itemAttributeArray valueForKey:#"value"]objectAtIndex:i];
[self SetTextFieldBorder:textField1];
textField1.placeholder = [keyArr objectAtIndex:i];
textField1.font = [UIFont systemFontOfSize:kJVFieldFontSize];
// textField1.clearsOnBeginEditing = YES;
textField1.clearButtonMode = UITextFieldViewModeWhileEditing;
textField1.floatingLabelFont = [UIFont boldSystemFontOfSize:kJVFieldFloatingLabelFontSize];
textField1.floatingLabelTextColor = floatingLabelColor;
// textField1.translatesAutoresizingMaskIntoConstraints = NO;
[textField1 resignFirstResponder];
[_scroll addSubview:textField1];
[textFields addObject:textField1];
[textField1 release];
y += height + margin;
if ([[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i] isEqualToString:#"string"]){
NSLog(#"type - %#",[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i]);
}else if ([[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i] isEqualToString:#"date"]){
NSLog(#"type - %#",[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i]);
[textField1 addTarget:self action:#selector(textFieldDidChange_dateChek:)
forControlEvents:UIControlEventEditingDidBegin];
}else if ([[[itemAttributeArray valueForKey:#"type"] objectAtIndex:i] isEqualToString:#"double"]){
}
}
and handle the textfield action
-(void)textFieldDidChange_dateChek:(JVFloatLabeledTextField*)textfield{
NSLog(#"iam called on first edit");
_picker_uiView.hidden = false;
_datePickerView.tag = textfield.tag;
[textfield resignFirstResponder];
[_datePickerView addTarget:self action:#selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
textfield.inputView = _datePickerView;
}
finally assign the value to the textfield as like follow
- (void)datePickerValueChanged:(UIDatePicker*)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"h:mm a"];
// textField1.tag = 102;
for(id aSubView in [_scroll subviews]){
if([aSubView isKindOfClass:[JVFloatLabeledTextField class]])
{
JVFloatLabeledTextField *textFds=(JVFloatLabeledTextField*)aSubView;
if (textFds.tag == sender.tag) {
NSLog(#"dad == %#",[dateFormatter stringFromDate:sender.date]);
textFds.text = [dateFormatter stringFromDate:sender.date];
[textFds resignFirstResponder];
[sender removeFromSuperview];
break;
}
}
}
}

when i am using 3 view on viewcontroller it get slow in objective c

I am using 3 view on one UIViewController. Because of this I have lots of code in viewDidLoad() Like this:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
customActivityIndicator.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:#"tmp-0.gif"],[UIImage imageNamed:#"tmp-1.gif"],[UIImage imageNamed:#"tmp-2.gif"],[UIImage imageNamed:#"tmp-3.gif"],[UIImage imageNamed:#"tmp-4.gif"],[UIImage imageNamed:#"tmp-5.gif"],[UIImage imageNamed:#"tmp-6.gif"],[UIImage imageNamed:#"tmp-7.gif"],[UIImage imageNamed:#"tmp-8.gif"],[UIImage imageNamed:#"tmp-9.gif"],[UIImage imageNamed:#"tmp-10.gif"],[UIImage imageNamed:#"tmp-11.gif"],[UIImage imageNamed:#"tmp-12.gif"],[UIImage imageNamed:#"tmp-13.gif"],[UIImage imageNamed:#"tmp-14.gif"],[UIImage imageNamed:#"tmp-15.gif"],nil];
customActivityIndicator.animationDuration = 1.0; // in seconds
customActivityIndicator.animationRepeatCount = 0; // sets to loop
[customActivityIndicator startAnimating];
btn.hidden=YES;
UILabel *lab =[[UILabel alloc] init];
lab.text = [NSString awesomeIcon:FaMailReply];
UIImage *listImage2 = [UIImage imageNamed:#"backicon.png.png"];
UIButton *listButton2 = [UIButton buttonWithType:UIButtonTypeCustom];
listButton2.backgroundColor=[UIColor whiteColor];
[[listButton2 layer] setBorderWidth:0.5f];
listButton2.layer.borderColor =[[UIColor blackColor] CGColor];
listButton2.layer.cornerRadius = btn.bounds.size.width / 3.4;// this value vary as per your desire
listButton2.clipsToBounds = YES;
UIFont *font = [UIFont fontWithName:#"FontAwesome" size:15.0];
UIColor *color = [UIColor blueColor];
NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,color,NSForegroundColorAttributeName, nil];
// [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,color,NSForegroundColorAttributeName, nil];
NSAttributedString *attributedStr = [[NSAttributedString alloc] initWithString:lab.text attributes:attrsDictionary];
// get the image size and apply it to the button frame
CGRect listButton2Frame = listButton2.frame;
listButton2Frame.size = listImage2.size;
listButton2.frame = listButton2Frame;
[listButton2 setAttributedTitle:attributedStr forState:UIControlStateNormal];
[listButton2 addTarget:self
action:#selector(LogoutClick:)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *jobsButton2 =
[[UIBarButtonItem alloc] initWithCustomView:listButton2];
//Notificaation Icon Button...
UILabel *lablnotification =[[UILabel alloc] init];
// lab.font = [UIFont fontWithName:#"FontAwesome" size:8];
// lab.textColor = [UIColor whiteColor];
lablnotification.text = [NSString awesomeIcon:FaHome];
UIImage *listImage4 = [UIImage imageNamed:#"notification.png"];
UIButton *listButton4 = [UIButton buttonWithType:UIButtonTypeCustom];
listButton4.backgroundColor=[UIColor whiteColor];
[[listButton4 layer] setBorderWidth:0.5f];
listButton4.layer.borderColor =[[UIColor blackColor] CGColor];
listButton4.layer.cornerRadius = btn.bounds.size.width / 3.4;// this value vary as per your desire
listButton4.clipsToBounds = YES;
UIFont *fontnotification = [UIFont fontWithName:#"FontAwesome" size:18.0];
UIColor *colornotification = [UIColor blueColor];
NSDictionary *attrsDictionarynotification = [NSDictionary dictionaryWithObjectsAndKeys:fontnotification,NSFontAttributeName,colornotification,NSForegroundColorAttributeName, nil];
// [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,color,NSForegroundColorAttributeName, nil];
NSAttributedString *attributedStrnotification = [[NSAttributedString alloc] initWithString:lablnotification.text attributes:attrsDictionarynotification];
// get the image size and apply it to the button frame
CGRect listButton4Frame = listButton4.frame;
listButton4Frame.size = listImage4.size;
listButton4.frame = listButton4Frame;
[listButton4 setAttributedTitle:attributedStrnotification forState:UIControlStateNormal];
[listButton4 addTarget:self
action:#selector(ActualNotificationClick:)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *jobsButton4 =
[[UIBarButtonItem alloc] initWithCustomView:listButton4];
UIImage *listImage3 = [UIImage imageNamed:#"ec2.png"];
UIButton *listButton3 = [UIButton buttonWithType:UIButtonTypeCustom];
// get the image size and apply it to the button frame
CGRect listButton3Frame = listButton3.frame;
listButton3Frame.size = listImage3.size;
listButton3.frame = listButton3Frame;
[listButton3 setImage:listImage3 forState:UIControlStateNormal];
[listButton3 addTarget:self
action:#selector(EmployeeClick:)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *jobsButton3 =
[[UIBarButtonItem alloc] initWithCustomView:listButton3];
self.navigationItem.rightBarButtonItems= [NSArray arrayWithObjects:jobsButton2,jobsButton4, nil];
self.navigationItem.leftBarButtonItems=[NSArray arrayWithObjects:jobsButton3, nil];
//NSUserDefault...
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
userid = [defaults objectForKey:#"UserId"];
NSLog(#"User Id is =%#",userid);
ServerString=[defaults objectForKey:#"ServerString"];
DefaultRegionIDString=[defaults objectForKey:#"DefaultRegionIDString"];
DefaultBranchIDString=[defaults objectForKey:#"DefaultBranchIDString"];
DefaultSiteIDString=[defaults objectForKey:#"DefaultSiteIDString"];
DefaultLocationString=[defaults objectForKey:#"DefaultLocationString"];
DefaultDateString =[defaults objectForKey:#"DefaultDateString"];
DefaultTimeString =[defaults objectForKey:#"DefaultTimeString"];
DefaultEmployeeNameString=[defaults objectForKey:#"DefaultEmployeeNameString"];
DefaultRegionNameString=[defaults objectForKey:#"DefaultRegionNameString"];
DefaultBranchNameString=[defaults objectForKey:#"DefaultBranchNameString"];
DefaultSiteNameString=[defaults objectForKey:#"DefaultSiteNameString"];
DefaultEventTypeString=[defaults objectForKey:#"DefaultEventTypeString"];
DefaultIncidentTypeString=[defaults objectForKey:#"DefaultIncidentTypeString"];
DefaultsIncidentNameString=[defaults objectForKey:#"DefaultsIncidentNameString"];
SegmentStringCheck=[defaults objectForKey:#"SegmentStringCheck"];
CheckIncidentString=[defaults objectForKey:#"CheckIncidentString"];
if([DefaultEventTypeString isEqualToString:#"1"])
{
lblreportregion.text = DefaultRegionIDString;
lblreportbranch.text = DefaultBranchIDString;
lblreportsite.text = DefaultSiteIDString;
// lblreportinjurytype.text=DefaultIncidentTypeString;
txtreportlocation.text = DefaultLocationString;
txtreportdate.text = DefaultDateString;
txtreporttime.text = DefaultTimeString;
txtreportemp.text = DefaultEmployeeNameString;
txtreportregion.text=DefaultRegionNameString;
txtreportbranch.text=DefaultBranchNameString;
txtreportsite.text=DefaultSiteNameString;
// txtreportinjurytype.text = DefaultsIncidentNameString;
}
else if ([DefaultEventTypeString isEqualToString:#"2"])
{
lblnearregion.text = DefaultRegionIDString;
lblnearbranch.text = DefaultBranchIDString;
lblnearsite.text = DefaultSiteIDString;
txtnearlocation.text = DefaultLocationString;
txtneardate.text = DefaultDateString;
txtneartime.text = DefaultTimeString;
txtnearemp.text = DefaultEmployeeNameString;
txtnearregion.text=DefaultRegionNameString;
txtnearbranch.text=DefaultBranchNameString;
txtnearsite.text=DefaultSiteNameString;
}
else if ([DefaultEventTypeString isEqualToString:#"3"])
{
lblspotingregion.text = DefaultRegionIDString;
lblspotingbranch.text = DefaultBranchIDString;
lblspotingsite.text = DefaultSiteIDString;
txtspotinglocation.text = DefaultLocationString;
txtspotingdate.text = DefaultDateString;
txtspotingtime.text = DefaultTimeString;
txtsportingemp.text = DefaultEmployeeNameString;
txtspotingregion.text=DefaultRegionNameString;
txtspotingbranch.text=DefaultBranchNameString;
txtspotingsite.text=DefaultSiteNameString;
}
if([SegmentStringCheck isEqualToString:#"0"])
{
segment.selectedSegmentIndex = UISegmentedControlNoSegment;
segment.selectedSegmentIndex = 0;
viewspoting.hidden=NO;
viewnear.hidden=YES;
viewreport.hidden=YES;
}
else if ([SegmentStringCheck isEqualToString:#"1"])
{
segment.selectedSegmentIndex = UISegmentedControlNoSegment;
segment.selectedSegmentIndex = 1;
viewspoting.hidden=YES;
viewnear.hidden=NO;
viewreport.hidden=YES;
//Near...
[self nearserverconnection];
[self nearserverconnectionincident];
[self nearserverconnectionactivity];
}
else if ([SegmentStringCheck isEqualToString:#"2"])
{
segment.selectedSegmentIndex = UISegmentedControlNoSegment;
segment.selectedSegmentIndex = 2;
viewspoting.hidden=YES;
viewnear.hidden=YES;
viewreport.hidden=NO;
//Report...
[self reportserverconnection];
[self reportserverconnectioninjury];
}
else
{
segment.selectedSegmentIndex = UISegmentedControlNoSegment;
segment.selectedSegmentIndex = 0;
viewspoting.hidden=NO;
viewnear.hidden=YES;
viewreport.hidden=YES;
}
//.........................//
//Sporting Hide Code...
//Table...
tablesportingbranch.hidden=YES;
tablesportingregion.hidden=YES;
tablesportingsite.hidden=YES;
//Label...
lblsportingactivitytype.hidden=YES;
lblsportingdept.hidden=YES;
lblsportingemp.hidden=YES;
lblspotingbranch.hidden=YES;
lblspotingincidenttype.hidden=YES;
lblspotingregion.hidden=YES;
lblspotingsite.hidden=YES;
//TextFieldDelegate...
txtspotingsite.delegate=self;
txtsportingemp.delegate=self;
txtspotinglocation.delegate=self;
//Date Picker...
pickerspotingdate.hidden=YES;
pickerspotingtime.hidden=YES;
//............................//
//Near Hide Code...
//View...
// viewnear.hidden=YES;
//Table...
tablenearbranch.hidden=YES;
tablenearregion.hidden=YES;
tablenearsite.hidden=YES;
//Label...
lblnearactivitytype.hidden=YES;
lblnearbranch.hidden=YES;
lblneardept.hidden=YES;
lblnearemp.hidden=YES;
lblnearincidenttype.hidden=YES;
lblnearregion.hidden=YES;
lblnearsite.hidden=YES;
//TextFieldDelegate..
txtnearsite.delegate=self;
txtnearemp.delegate=self;
txtnearlocation.delegate=self;
//Date Picker...
pickerneardate.hidden=YES;
pickerneartime.hidden=YES;
//...........................//
//Report Hide View Code...
//View...
// viewreport.hidden=YES;
//Table...
tablereportbranch.hidden=YES;
tablereportinjurytype.hidden=YES;
tablereportregion.hidden=YES;
tablereportsite.hidden=YES;
//Label...
lblreportbranch.hidden=YES;
lblreportdept.hidden=YES;
lblreportemp.hidden=YES;
lblreportinjurytype.hidden=YES;
lblreportregion.hidden=YES;
lblreportsite.hidden=YES;
//TextFieldDelegate...
txtreportsite.delegate=self;
txtreportemp.delegate=self;
txtreportlocation.delegate=self;
//Date Picker...
pickerreporttime.hidden=YES;
pickereportdate.hidden=YES;
//.............................//
//Font Asowme
//Show...
lblspotingShow.font = [UIFont fontWithName:#"FontAwesome" size:15];
lblspotingShow.textColor = [UIColor blackColor];
lblspotingShow.text = [NSString awesomeIcon:FaEye];
//Scroll View...
[scrollspoting setContentSize:CGSizeMake(300, 500)];
[scrollnear setContentSize:CGSizeMake(300, 500)];
[scrollreport setContentSize:CGSizeMake(300, 730)];
UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:#selector(swipeHandler:)];
[gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[self.view addGestureRecognizer:gestureRecognizer];
//Button Diamiter...
//Spoting Button...
btnsportinghideadd.layer.cornerRadius = 4; // this value vary as per your desire
btnsportinghideadd.clipsToBounds = YES;
//Near Button...
btnnearhideadd.layer.cornerRadius = 4; // this value vary as per your desire
btnnearhideadd.clipsToBounds = YES;
//Report Button...
btnreportnext.layer.cornerRadius = 4; // this value vary as per your desire
btnreportnext.clipsToBounds = YES;
//Spoting...
[self spotingserverconnection];
[self spotingserverconnectionactivity];
[self spotingserverconnectionincident];
[txtspotingsite addTarget:self action:#selector(spotingtextFieldDidChangeSite:) forControlEvents:UIControlEventEditingChanged];
// prevents the scroll view from swallowing up the touch event of child buttons
[txtnearsite addTarget:self action:#selector(neartextFieldDidChangeSite:) forControlEvents:UIControlEventEditingChanged];
[txtreportsite addTarget:self action:#selector(reporttextFieldDidChangeSite:) forControlEvents:UIControlEventEditingChanged];
UITapGestureRecognizer *tapGesturereportinjury = [[UITapGestureRecognizer alloc] initWithTarget:self action:#selector(hideSubViewreportinjury)];
// prevents the scroll view from swallowing up the touch event of child buttons
tapGesturereportinjury.cancelsTouchesInView = NO;
[scrollreport addGestureRecognizer:tapGesturereportinjury];
IssueSelectedIDarray=[[NSMutableArray alloc] init];
IssueSelectedNamearray=[[NSMutableArray alloc] init];
ReportInjurySelectedNamearray=[[NSMutableArray alloc] init];
ReportInjurySelectedIDarray=[[NSMutableArray alloc] init];
[self testInternetConnection];
//Spoting Date and Time..
NSDateFormatter *Spotingdateformatter;
Spotingdateformatter = [[NSDateFormatter alloc] init];
[Spotingdateformatter setDateFormat:#"dd/MM/yyyy"];
SpotingdateString = [Spotingdateformatter stringFromDate:[NSDate date]];
NSLog(#"Current Time =%#",SpotingdateString);
CurrentDate=SpotingdateString;
NSDate * now = [NSDate date];
NSDateFormatter *Spotingtimeformatter = [[NSDateFormatter alloc] init];
[Spotingtimeformatter setDateFormat:#"hh:mm"];
SpotingTimeString = [Spotingtimeformatter stringFromDate:now];
NSLog(#"newDateString %#", SpotingTimeString);
//Near Date and Time..
NSDateFormatter *Neardateformatter;
Neardateformatter = [[NSDateFormatter alloc] init];
[Neardateformatter setDateFormat:#"dd/MM/yyyy"];
NeardateString = [Neardateformatter stringFromDate:[NSDate date]];
NSLog(#"Current Time =%#",NeardateString);
NSDate * nowNear = [NSDate date];
NSDateFormatter *Neartimeformatter = [[NSDateFormatter alloc] init];
[Neartimeformatter setDateFormat:#"hh:mm"];
NearTimeString = [Neartimeformatter stringFromDate:nowNear];
NSLog(#"newDateString %#", NearTimeString);
//Report Date and Time..
NSDateFormatter *Reportdateformatter;
Reportdateformatter = [[NSDateFormatter alloc] init];
[Reportdateformatter setDateFormat:#"dd/MM/yyyy"];
ReportdateString = [Reportdateformatter stringFromDate:[NSDate date]];
NSLog(#"Current Time =%#",ReportdateString);
NSDate * nowReport = [NSDate date];
NSDateFormatter *Reporttimeformatter = [[NSDateFormatter alloc] init];
[Reporttimeformatter setDateFormat:#"hh:mm"];
ReportTimeString = [Reporttimeformatter stringFromDate:nowReport];
NSLog(#"newDateString %#", ReportTimeString);
}
Its working to much slow. Is there is any way to speed it up?
ViewName *Incedent =[[ViewName alloc] initWithNibName:#"ViewName" bundle:nil];
[self.navigationController pushViewController:Incedent animated:YES];
I have used this code to pushviewcontroller.
You need to evaluate what your code is doing, and find out where it is slow. I don't know what this method is doing, but I'm betting the line:
[self testInternetConnection];
is one of the problems. Comment out that line, and see what happens.

How to get the position of a particular date when the date is selected in calender,ios

Am getting confused here.I had implemented a calender control in ios application.But not able to find the position of a particular date when the user selects the date.How to find the position of a particular date which is selected by the user?Please some one help me or give me some advice.Provide any sample codes.Great answers would be appreciated.
In DayButton.h
//
// DayButton.h
// DDCalendarView
//
//
//
#import <UIKit/UIKit.h>
#protocol DayButtonDelegate <NSObject>
- (void)dayButtonPressed:(id)sender;
#end
#interface DayButton : UIButton {
id <DayButtonDelegate> delegate;
NSDate *buttonDate;
}
#property (nonatomic, assign) id <DayButtonDelegate> delegate;
#property (nonatomic, copy) NSDate *buttonDate;
- (id)buttonWithFrame:(CGRect)buttonFrame;
#end
In DayButton.m
//
// DayButton.m
// DDCalendarView
//
//
#import "DayButton.h"
#implementation DayButton
#synthesize delegate, buttonDate;
- (id)buttonWithFrame:(CGRect)buttonFrame {
self = [DayButton buttonWithType:UIButtonTypeCustom];
self.frame = buttonFrame;
self.titleLabel.textAlignment = UITextAlignmentRight;
self.backgroundColor = [UIColor clearColor];
[self setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[self addTarget:delegate action:#selector(dayButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
UILabel *titleLabel = [self titleLabel];
CGRect labelFrame = titleLabel.frame;
int framePadding = 4;
labelFrame.origin.x = self.bounds.size.width - labelFrame.size.width - framePadding;
labelFrame.origin.y = framePadding;
[self titleLabel].frame = labelFrame;
}
- (void)dealloc {
[super dealloc];
}
#end
In DDCalenderView.h
//
// DDCalendarView.h
// DDCalendarView
//
//
#import <UIKit/UIKit.h>
#import "DayButton.h"
#protocol DDCalendarViewDelegate <NSObject>
- (void)dayButtonPressed:(DayButton *)button;
#optional
- (void)prevButtonPressed;
- (void)nextButtonPressed;
#end
#interface DDCalendarView : UIView <DayButtonDelegate> {
id <DDCalendarViewDelegate> delegate;
NSString *calendarFontName;
UILabel *monthLabel;
NSMutableArray *dayButtons;
NSCalendar *calendar;
float calendarWidth;
float calendarHeight;
float cellWidth;
float cellHeight;
int currentMonth;
int currentYear;
}
#property(nonatomic, assign) id <DDCalendarViewDelegate> delegate;
- (id)initWithFrame:(CGRect)frame fontName:(NSString *)fontName delegate:(id)theDelegate;
- (void)updateCalendarForMonth:(int)month forYear:(int)year;
- (void)drawDayButtons;
- (void)prevBtnPressed:(id)sender;
- (void)nextBtnPressed:(id)sender;
#end
In DDCalenderView.m
//
// DDCalendarView.m
// DDCalendarView
//
//
#import "DDCalendarView.h"
#implementation DDCalendarView
#synthesize delegate;
- (id)initWithFrame:(CGRect)frame fontName:(NSString *)fontName delegate:(id)theDelegate {
if ((self = [super initWithFrame:frame])) {
self.delegate = theDelegate;
//Initialise vars
calendarFontName = fontName;
calendarWidth = frame.size.width;
calendarHeight = frame.size.height;
cellWidth = frame.size.width / 7.0f;
cellHeight = frame.size.height / 14.0f;
//View properties
// UIColor *bgPatternImage = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:#"square-paper.png"]];
//
// self.backgroundColor = bgPatternImage;
// [bgPatternImage release];
//Set up the calendar header
self.backgroundColor=[UIColor whiteColor];
UIButton *prevBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[prevBtn setImage:[UIImage imageNamed:#"left-arrow.png"] forState:UIControlStateNormal];
prevBtn.frame = CGRectMake(0, 0, cellWidth, cellHeight);
[prevBtn addTarget:self action:#selector(prevBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
UIButton *nextBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[nextBtn setImage:[UIImage imageNamed:#"right-arrow.png"] forState:UIControlStateNormal];
nextBtn.frame = CGRectMake(calendarWidth - cellWidth, 0, cellWidth, cellHeight);
[nextBtn addTarget:self action:#selector(nextBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
CGRect monthLabelFrame = CGRectMake(cellWidth, 0, calendarWidth - 2*cellWidth, cellHeight);
monthLabel = [[UILabel alloc] initWithFrame:monthLabelFrame];
monthLabel.font = [UIFont fontWithName:calendarFontName size:18];
monthLabel.textAlignment = UITextAlignmentCenter;
monthLabel.backgroundColor = [UIColor clearColor];
monthLabel.textColor = [UIColor blackColor];
//Add the calendar header to view
[self addSubview: prevBtn];
[self addSubview: nextBtn];
[self addSubview: monthLabel];
//Add the day labels to the view
char *days[7] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
for(int i = 0; i < 7; i++) {
CGRect dayLabelFrame = CGRectMake(i*cellWidth, cellHeight, cellWidth, cellHeight);
UILabel *dayLabel = [[UILabel alloc] initWithFrame:dayLabelFrame];
dayLabel.text = [NSString stringWithFormat:#"%s", days[i]];
dayLabel.textAlignment = UITextAlignmentCenter;
dayLabel.backgroundColor = [UIColor clearColor];
dayLabel.font = [UIFont fontWithName:calendarFontName size:16];
dayLabel.textColor = [UIColor darkGrayColor];
[self addSubview:dayLabel];
[dayLabel release];
}
[self drawDayButtons];
//Set the current month and year and update the calendar
calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *dateParts = [calendar components:unitFlags fromDate:[NSDate date]];
currentMonth = [dateParts month];
currentYear = [dateParts year];
[self updateCalendarForMonth:currentMonth forYear:currentYear];
}
return self;
}
- (void)drawDayButtons {
dayButtons = [[NSMutableArray alloc] initWithCapacity:42];
for (int i = 0; i < 6; i++) {
for(int j = 0; j < 7; j++) {
CGRect buttonFrame = CGRectMake(j*cellWidth, (i+2)*cellHeight, cellWidth, cellHeight);
DayButton *dayButton = [[DayButton alloc] buttonWithFrame:buttonFrame];
dayButton.titleLabel.font = [UIFont fontWithName:calendarFontName size:14];
dayButton.delegate = self;
[dayButtons addObject:dayButton];
[dayButton release];
[self addSubview:[dayButtons lastObject]];
}
}
}
- (void)updateCalendarForMonth:(int)month forYear:(int)year {
char *months[12] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
monthLabel.text = [NSString stringWithFormat:#"%s %d", months[month - 1], year];
//Get the first day of the month
NSDateComponents *dateParts = [[NSDateComponents alloc] init];
[dateParts setMonth:month];
[dateParts setYear:year];
[dateParts setDay:1];
NSDate *dateOnFirst = [calendar dateFromComponents:dateParts];
[dateParts release];
NSDateComponents *weekdayComponents = [calendar components:NSWeekdayCalendarUnit fromDate:dateOnFirst];
int weekdayOfFirst = [weekdayComponents weekday];
//Map first day of month to a week starting on Monday
//as the weekday component defaults to 1->Sun, 2->Mon...
if(weekdayOfFirst == 1) {
weekdayOfFirst = 7;
} else {
--weekdayOfFirst;
}
int numDaysInMonth = [calendar rangeOfUnit:NSDayCalendarUnit
inUnit:NSMonthCalendarUnit
forDate:dateOnFirst].length;
int day = 1;
for (int i = 0; i < 6; i++) {
for(int j = 0; j < 7; j++) {
int buttonNumber = i * 7 + j;
DayButton *button = [dayButtons objectAtIndex:buttonNumber];
button.enabled = NO; //Disable buttons by default
[button setTitle:nil forState:UIControlStateNormal]; //Set title label text to nil by default
[button setButtonDate:nil];
if(buttonNumber >= (weekdayOfFirst - 1) && day <= numDaysInMonth) {
[button setTitle:[NSString stringWithFormat:#"%d", day]
forState:UIControlStateNormal];
NSDateComponents *dateParts = [[NSDateComponents alloc] init];
[dateParts setMonth:month];
[dateParts setYear:year];
[dateParts setDay:day];
NSDate *buttonDate = [calendar dateFromComponents:dateParts];
[dateParts release];
[button setButtonDate:buttonDate];
button.enabled = YES;
++day;
}
}
}
}
- (void)prevBtnPressed:(id)sender {
if(currentMonth == 1) {
currentMonth = 12;
--currentYear;
} else {
--currentMonth;
}
[self updateCalendarForMonth:currentMonth forYear:currentYear];
if ([self.delegate respondsToSelector:#selector(prevButtonPressed)]) {
[self.delegate prevButtonPressed];
}
}
- (void)nextBtnPressed:(id)sender {
if(currentMonth == 12) {
currentMonth = 1;
++currentYear;
} else {
++currentMonth;
}
[self updateCalendarForMonth:currentMonth forYear:currentYear];
if ([self.delegate respondsToSelector:#selector(nextButtonPressed)]) {
[self.delegate nextButtonPressed];
}
}
- (void)dayButtonPressed:(id)sender {
DayButton *dayButton = (DayButton *) sender;
[self.delegate dayButtonPressed:dayButton];
}
- (void)dealloc {
[calendar release];
[dayButtons release];
[super dealloc];
}
#end
In MainViewController.h
//
// MainViewController.h
// DDCalendarView
//
//
#import <UIKit/UIKit.h>
#import "DDCalendarView.h"
#interface MainViewController : UIViewController <DDCalendarViewDelegate> {
DDCalendarView *calendarView;
}
#end
In MainVIewController.m
//
// MainViewController.m
// DDCalendarView
//
//
#import "MainViewController.h"
#implementation MainViewController
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
UIView *appView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
calendarView = [[DDCalendarView alloc] initWithFrame:appView.bounds fontName:#"AmericanTypewriter" delegate:self];
self.view = appView;
[appView release];
[self.view addSubview: calendarView];
}
- (void)dayButtonPressed:(DayButton *)button {
//For the sake of example, we obtain the date from the button object
//and display the string in an alert view
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
NSString *theDate = [dateFormatter stringFromDate:button.buttonDate];
[dateFormatter release];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
NSString *theDate = [dateFormatter stringFromDate:button.buttonDate];
[dateFormatter release];
// UIAlertView *dateAlert = [[UIAlertView alloc]
// initWithTitle:#"Date Pressed"
// message:theDate
// delegate:self
// cancelButtonTitle:#"Ok"
// otherButtonTitles:nil];
// [dateAlert show];
// [dateAlert release];
//
timeEntry *time=[[timeEntry alloc]init];
[time setDate:theDate];
[self.navigationController pushViewController:time animated:YES];
[time release];
}
- (void)nextButtonPressed {
NSLog(#"Next...");
}
- (void)prevButtonPressed {
NSLog(#"Prev...");
}
/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
}
*/
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
#end
I took an image above the calender.If the user selects the date,the image has to move to that date in horizontal or vertical position.Is Animation necessary?If yes,how to handle or otherwise can anyone help in their own manner.Please.Great answers would be appreciated.
Have you ever tried Tapku library?
Its preferable for custom calender controls. Hope this helps you.
I would recommend using Kal. I use it for a month view and it works great. It keeps track of the date even when you move to another view.
EDIT:
get the location of the tap check out this link

iOS calendar integration to app

I having an app so i just added some event or remainder (football match,movie) in my app for some particular date and time.
And this add event i also want to display in iphone calendar.
thanks and regards.
Have you checked out EventKit?
You can use simple JTCalender for this
first oyu have to include JT Calender framework for the project
You have to create two views in your UIViewController:
The first view is JTCalendarMenuView and it represents the part with the months names. This view is optional.
The second view is JTHorizontalCalendarView or JTVerticalCalendarView, it represents the calendar itself.
Your UIViewController have to implement JTCalendarDelegate, all methods are optional.
in .h file
#import <UIKit/UIKit.h>
#import "CustomTableViewCell.h"
#import "JTCalendar/JTCalendar.h"
#interface CalendarViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,JTCalendarDelegate>
#property (strong, nonatomic) JTCalendarMenuView *calendarMenuView;
#property (strong, nonatomic) JTHorizontalCalendarView *calendarContentView;
#property (strong, nonatomic) JTCalendarManager *calendarManager;
#property (weak, nonatomic) IBOutlet NSLayoutConstraint *calendarContentViewHeight;
#end
.m file
------------
#import "CalendarViewController.h"
#import "ApptWindowView.h"
#import "SVProgressHUD.h"
#interface CalendarViewController () < UITextFieldDelegate>{
NSMutableDictionary *dayDateDict;
NSMutableArray*jsonDate,*dateAr1,*dateAr2;
UITableView *appointTableView;
CGSize screenRect;
NSString *dateAfterString;
int fontSize,headerBtnfont,height;
NSDateFormatter *dateFormat1 ;
NSString*cmpDay;
int count;
NSString * clickedDate;
NSString *day ;
NSMutableDictionary *_eventsByDate;
NSDate *_todayDate;
NSDate *_minDate;
NSDate *_maxDate;
NSDate *_dateSelected;
UIActivityIndicatorView *activityIndicator;
int i;
}
#end
#implementation CalendarViewController
- (void)viewDidLoad
{
[super viewDidLoad];
i=0;
dayDateDict=[[NSMutableDictionary alloc]init];
dateAr1=[[NSMutableArray alloc]init];
dateAr2=[[NSMutableArray alloc]init];
screenRect=[[UIScreen mainScreen]bounds].size;
//Create header here
self.view.backgroundColor=[UIColor colorWithRed:(CGFloat)233/255 green:(CGFloat)239/255 blue:(CGFloat)239/255 alpha:1];
UIView * headerView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 55)];
headerView.backgroundColor =[UIColor whiteColor];
[self.view addSubview:headerView];
UILabel * titleLable =[[UILabel alloc]initWithFrame:CGRectMake(60, 25, [UIScreen mainScreen].bounds.size.width-120, 25)];
titleLable.text =#"CHOOSE APPOINTMENT";
titleLable.textAlignment = NSTextAlignmentCenter;
titleLable.font =[UIFont systemFontOfSize:12];
[headerView addSubview:titleLable];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:[UIImage imageNamed:#"back_btn.png"] forState:UIControlStateNormal];
[backButton setFrame:CGRectMake(15, 30, 45, 15)];
[backButton addTarget:self action:#selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[headerView addSubview:backButton];
UIButton *nextButton = [UIButton buttonWithType:UIButtonTypeCustom];
[nextButton setImage:[UIImage imageNamed:#"next_btn.png"] forState:UIControlStateNormal];
[nextButton setFrame:CGRectMake([UIScreen mainScreen].bounds.size.width-60, 30, 45, 15)];
[nextButton addTarget:self action:#selector(continueAction) forControlEvents:UIControlEventTouchUpInside];
[headerView addSubview:nextButton];
[self activityAction];
dispatch_async(dispatch_get_global_queue(0, 0),^{
dispatch_async(dispatch_get_main_queue(),^{
// [self createUI];
[self fetchSchedule];
_calendarManager = [JTCalendarManager new];
_calendarManager.delegate = self;
[self createMinAndMaxDate];
_calendarContentView=[JTHorizontalCalendarView new];
_calendarContentView.frame = CGRectMake(20, 100,[UIScreen mainScreen].bounds.size.width-40 , [UIScreen mainScreen].bounds.size.width-40);
_calendarContentView.backgroundColor=[UIColor whiteColor];
[_calendarManager setContentView:_calendarContentView];
[self.view addSubview:_calendarContentView];
_calendarMenuView=[JTCalendarMenuView new];
_calendarMenuView.frame=CGRectMake(20, 55,[UIScreen mainScreen].bounds.size.width-40 ,50);
_calendarMenuView.backgroundColor=[UIColor clearColor];
[self.view addSubview:_calendarMenuView];
[_calendarManager setMenuView:_calendarMenuView];
[_calendarManager setDate:[NSDate date]];
[activityIndicator stopAnimating];
});
});
[self createUI];
}
-(void)continueAction{
ApptWindowView *apptWindow=[[ApptWindowView alloc]init];
[self.navigationController pushViewController:apptWindow animated:YES];
}
- (UIView<JTCalendarDay> *)calendarBuildDayView:(JTCalendarManager *)calendar
{
JTCalendarDayView *view = [JTCalendarDayView new];
view.textLabel.font = [UIFont fontWithName:#"Avenir-Light" size:13];
view.textLabel.textColor = [UIColor blackColor];
return view;
}
NSError *error; NSURLResponse * urlResponse;
NSURL * url =[NSURL URLWithString:fetchScheduleService];
NSMutableURLRequest * request =[[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:50];
NSString * body =[NSString stringWithFormat:#"departmentId=%d",[SingletonClass sharedSingleton].deptId ];
[request setHTTPMethod:#"POST"];
[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
[request setValue:#"application/x-www-form-urlencoded" forHTTPHeaderField:#"Content-Type"];
NSData * data =[NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
if (!data) {
[SVProgressHUD dismiss];
return;
}
id jsonResponse =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
NSLog(#"schedule jason---->%#",jsonResponse);
if ([[jsonResponse objectForKey:#"code"] isEqualToNumber:[NSNumber numberWithInt:200]]) {
jsonDate=[jsonResponse objectForKey:#"data"];
[self convertTimeStamp];
}
//dispatch_async(dispatch_get_main_queue(),^{
// [SVProgressHUD dismiss];
//[self createUI];
// });
// });
}
#pragma mark-Create UI/Table View
-(void)createUI{
appointTableView = [[UITableView alloc]init];
appointTableView.frame = CGRectMake(10, 100+screenRect.width-40+10, screenRect.width-20, screenRect.height-( 100+screenRect.width-40+10));
appointTableView.delegate = self;
appointTableView.dataSource = self;
appointTableView.backgroundColor =[UIColor clearColor];
appointTableView.showsVerticalScrollIndicator = NO;
appointTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:appointTableView];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [[dayDateDict objectForKey:clickedDate] count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
CustomTableViewCell * cell =(CustomTableViewCell*) [tableView cellForRowAtIndexPath:indexPath];
if (!cell) {
cell = [[CustomTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:#"calender"];
cell.backgroundColor = [UIColor clearColor];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
[dateFormat1 setDateFormat:#"HH:mm"];
NSDate * aptTime =[dateFormat1 dateFromString:[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row] ];
NSDate *dateAfter=[aptTime dateByAddingTimeInterval:(1800) ];
dateAfterString =[dateFormat1 stringFromDate:dateAfter];
NSString *dis=[NSString stringWithFormat:#"%#-%#",[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row],dateAfterString];
cell.appointmentTime.text =dis;
return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return 100;
}
return 60;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
ApptWindowView *apptWindow=[[ApptWindowView alloc]init];
[self.navigationController pushViewController:apptWindow animated:YES];
NSLog(#"clicked date-->%#",[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row]);
NSDate * aptTime =[dateFormat1 dateFromString:[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row] ];
NSDate *dateAfter=[aptTime dateByAddingTimeInterval:(1800) ];
dateAfterString =[dateFormat1 stringFromDate:dateAfter];
NSString *dis=[NSString stringWithFormat:#"%# to %# on %#",[[dayDateDict objectForKey:clickedDate]objectAtIndex:indexPath.row],dateAfterString,day];
[[NSUserDefaults standardUserDefaults]setObject:dis forKey:#"appointmentTime"];
[[NSUserDefaults standardUserDefaults]synchronize];
}
#pragma mark-convert timeStamp to date
-(void)convertTimeStamp{
for( NSString*valueForDate in jsonDate){
NSTimeInterval timeSec=[valueForDate doubleValue];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeSec];
NSLog(#"\ndate are-->%#",date);
[self separateDate:date];
}
}
#pragma mark-separate date and Time
-(void)separateDate:(NSDate*)date1{
dateFormat1 = [[NSDateFormatter alloc] init];
[dateFormat1 setDateFormat:#"HH:mm"];
NSString * resultTime =[dateFormat1 stringFromDate:date1];
NSLog(#"date is-->%#",resultTime);
[dateFormat1 setDateFormat:#"dd-MM-YYYY"];
NSString *resultDay=[dateFormat1 stringFromDate:date1];
NSLog(#"day is-->%#",resultDay);
if([cmpDay isEqual:resultDay] || cmpDay==nil){
if(count!=1){
[dateAr1 addObject:resultTime];
}
if(count==1){
[dateAr2 addObject:resultTime];
}
}
else{
count=1;
dateAr2=[[NSMutableArray alloc]init];
[dateAr2 addObject:resultTime];
}
cmpDay=resultDay;
if(count!=1){
[dayDateDict setObject:dateAr1 forKey:resultDay];
}
else{
[dayDateDict setObject:dateAr2 forKey:resultDay];
}
NSLog(#"dictionary--->%#",dayDateDict);
}
#pragma mark - Buttons callback
- (IBAction)didGoTodayTouch
{
[_calendarManager setDate:_todayDate];
}
- (IBAction)didChangeModeTouch
{
_calendarManager.settings.weekModeEnabled = !_calendarManager.settings.weekModeEnabled;
[_calendarManager reload];
CGFloat newHeight = 300;
if(_calendarManager.settings.weekModeEnabled){
newHeight = 85.;
}
self.calendarContentViewHeight.constant = newHeight;
[self.view layoutIfNeeded];
}
#pragma mark - CalendarManager delegate
// Exemple of implementation of prepareDayView method
// Used to customize the appearance of dayView
- (void)calendar:(JTCalendarManager *)calendar prepareDayView:(JTCalendarDayView *)dayView
{
// Today
if([_calendarManager.dateHelper date:[NSDate date] isTheSameDayThan:dayView.date]){
dayView.circleView.hidden = NO;
dayView.circleView.backgroundColor = [UIColor blueColor];
dayView.dotView.backgroundColor = [UIColor whiteColor];
dayView.textLabel.textColor = [UIColor whiteColor];
}
// Selected date
else if(_dateSelected && [_calendarManager.dateHelper date:_dateSelected isTheSameDayThan:dayView.date]){
dayView.circleView.hidden = NO;
dayView.circleView.backgroundColor = [UIColor redColor];
dayView.dotView.backgroundColor = [UIColor whiteColor];
dayView.textLabel.textColor = [UIColor whiteColor];
}
// Other month
else if(![_calendarManager.dateHelper date:_calendarContentView.date isTheSameMonthThan:dayView.date]){
dayView.circleView.hidden = YES;
dayView.dotView.backgroundColor = [UIColor redColor];
dayView.textLabel.textColor = [UIColor lightGrayColor];
}
// Another day of the current month
else{
dayView.circleView.hidden = YES;
dayView.dotView.backgroundColor = [UIColor redColor];
dayView.textLabel.textColor = [UIColor blackColor];
}
if([self haveEventForDay:dayView.date]){
dayView.dotView.hidden = NO;
}
else{
dayView.dotView.hidden = YES;
}
}
- (void)calendar:(JTCalendarManager *)calendar didTouchDayView:(JTCalendarDayView *)dayView
{
_dateSelected = dayView.date ;
NSLog(#"orginal Clicked day-->%#",dayView.date);
NSDateFormatter *dateFormat2 = [[NSDateFormatter alloc] init];
[dateFormat2 setDateFormat:#"dd-MM-YYYY"];
clickedDate =[dateFormat2 stringFromDate:_dateSelected];
NSLog(#"Selected date===>%#",clickedDate);
NSString* s= [dayDateDict objectForKey:clickedDate];
NSLog(#"time is===>%#",s);
[dateFormat2 setDateFormat:#"EEE, MMM dd "];
day =[dateFormat2 stringFromDate:_dateSelected];
NSLog(#"Selected day===>%#",day);
// Animation for the circleView
dayView.circleView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1);
[UIView transitionWithView:dayView
duration:.3
options:0
animations:^{
dayView.circleView.transform = CGAffineTransformIdentity;
[_calendarManager reload];
} completion:nil];
// Load the previous or next page if touch a day from another month
if(![_calendarManager.dateHelper date:_calendarContentView.date isTheSameMonthThan:dayView.date]){
if([_calendarContentView.date compare:dayView.date] == NSOrderedAscending){
[_calendarContentView loadNextPageWithAnimation];
}
else{
[_calendarContentView loadPreviousPageWithAnimation];
}
}
[appointTableView reloadData];
}
#pragma mark - CalendarManager delegate - Page mangement
// Used to limit the date for the calendar, optional
- (BOOL)calendar:(JTCalendarManager *)calendar canDisplayPageWithDate:(NSDate *)date
{
return [_calendarManager.dateHelper date:date isEqualOrAfter:_minDate andEqualOrBefore:_maxDate];
}
- (void)calendarDidLoadNextPage:(JTCalendarManager *)calendar
{
// NSLog(#"Next page loaded");
}
- (void)calendarDidLoadPreviousPage:(JTCalendarManager *)calendar
{
// NSLog(#"Previous page loaded");
}
#pragma mark - Fake data
- (void)createMinAndMaxDate
{
_todayDate = [NSDate date];
// Min date will be 2 month before today
_minDate = [_calendarManager.dateHelper addToDate:_todayDate months:-3];
// Max date will be 2 month after today
_maxDate = [_calendarManager.dateHelper addToDate:_todayDate months:3];
}
- (BOOL)haveEventForDay:(NSDate *)date
{
if(i>=[dayDateDict allKeys].count){
i=0;
}
NSDateFormatter *dateFormatter;
dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:#"dd-MM-YYYY"];
NSString *key = [dateFormatter stringFromDate:date];
while(i<[dayDateDict allKeys].count){
if([key isEqual:[[dayDateDict allKeys]objectAtIndex:i]]){
i++;
return YES;
}
else
return NO;
}
return NO;
}
#pragma mark-Activity Indicator
-(void)activityAction{
CGSize windowSize =[UIScreen mainScreen].bounds.size;
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activityIndicator.frame = CGRectMake(windowSize.width/2-20, windowSize.height/2-55,40 ,40);
activityIndicator.color = [UIColor blackColor];
activityIndicator.alpha = 1;
[self.view addSubview:activityIndicator];
//[self placeSearchbaseId];
[activityIndicator startAnimating];
}
#end
I am fetching json data feching time form json as time stamp format and converting to local time
Then i am creating an events for it in the calender
You have third party apps like Kal which supports calendar integration. Check this link:
Kal Calendar
Hope it helps

Resources