//.h
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface MasterViewController : UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIPrintInteractionControllerDelegate>{
IBOutlet UITextField *nameField;
IBOutlet UITextField *districtField,*emailField,*mobileField;
IBOutlet UIImageView * imageView;
NSMutableArray *imageArray;
NSMutableArray *nameArray;
NSMutableArray *distrctArray;
NSMutableArray *emailArray;
NSMutableArray *mobileArray;
NSUserDefaults *currentDefaults;
int p;
}
-(IBAction)photoButton:(id)sender;
-(IBAction)SaveButton:(id)sender;
-(IBAction)list:(id)sender;
@end
//.m
CGFloat animatedDistance;
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;
#import "MasterViewController.h"
#import "DetailViewController.h"
#import "Base64.h"
@implementation MasterViewController
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
// signup.enabled=NO;
CGRect textFieldRect =
[self.view.window convertRect:textField.bounds fromView:textField];
CGRect viewRect =
[self.view.window convertRect:self.view.bounds fromView:self.view];
CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;
CGFloat numerator =
midline - viewRect.origin.y
- MINIMUM_SCROLL_FRACTION * viewRect.size.height;
CGFloat denominator =
(MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)
* viewRect.size.height;
CGFloat heightFraction = numerator / denominator;
if (heightFraction < 0.0)
{
heightFraction = 0.0;
}
else if (heightFraction > 1.0)
{
heightFraction = 1.0;
}
UIInterfaceOrientation orientation =
[[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationPortrait ||
orientation == UIInterfaceOrientationPortraitUpsideDown)
{
animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
}
else
{
animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
}
CGRect viewFrame = self.view.frame;
viewFrame.origin.y -= animatedDistance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
CGRect viewFrame = self.view.frame;
viewFrame.origin.y += animatedDistance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
if(textField == nameField) {
[districtField becomeFirstResponder];
}
else if(textField == districtField) {
[emailField becomeFirstResponder];
}
else if(textField == emailField) {
[mobileField becomeFirstResponder];
}
else if(textField == mobileField) {
[mobileField resignFirstResponder];
}
return YES;
}
- (void)viewDidLoad
{
[super viewDidLoad];
currentDefaults = [NSUserDefaults standardUserDefaults];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSData *dataRepresentingSavedArray0 = [currentDefaults objectForKey:@"savedImage"];
NSMutableArray *oldSavedArray0 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray0];
imageArray = [[NSMutableArray alloc] initWithArray:oldSavedArray0];
NSLog(@"image-- %d",[imageArray count]);
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedName"];
NSMutableArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
nameArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
NSLog(@"name-- %d",[nameArray count]);
NSData *dataRepresentingSavedArray1 = [currentDefaults objectForKey:@"savedDt"];
NSMutableArray *oldSavedArray1 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray1];
distrctArray = [[NSMutableArray alloc] initWithArray:oldSavedArray1];
NSLog(@"distrct-- %d",[distrctArray count]);
NSData *dataRepresentingSavedArray2 = [currentDefaults objectForKey:@"savedEmail"];
NSMutableArray *oldSavedArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray2];
emailArray = [[NSMutableArray alloc] initWithArray:oldSavedArray2];
NSLog(@"email-- %d",[emailArray count]);
NSData *dataRepresentingSavedArray3 = [currentDefaults objectForKey:@"savedMobile"];
NSMutableArray *oldSavedArray3 = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray3];
mobileArray = [[NSMutableArray alloc] initWithArray:oldSavedArray3];
NSLog(@"mobile-- %d",[mobileArray count]);
if([currentDefaults objectForKey:@"edit"]){
NSString *index=[currentDefaults valueForKey:@"edit"];
p=[index intValue];
NSLog(@"Hi- %d",p);
NSData *imgData = (NSData*)[imageArray objectAtIndex:p];
UIImage* imge = [[UIImage alloc] initWithData:imgData];
imageView.image=imge;
nameField.text=[nameArray objectAtIndex:p];
districtField.text=[distrctArray objectAtIndex:p];
emailField.text=[emailArray objectAtIndex:p];
mobileField.text=[mobileArray objectAtIndex:p];
}
}
-(IBAction)photoButton:(id)sender{
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Use photo from:"
delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Camera",@"Library",nil];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view ];
}
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
UIImagePickerController * picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
if (buttonIndex == 0) {
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:nil];
} else if (buttonIndex == 1) {
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentViewController:picker animated:YES completion:nil];
}
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissViewControllerAnimated:YES completion:nil];
imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}
-(IBAction)SaveButton:(id)sender{
[mobileField resignFirstResponder];
NSString *msgStr = @"";
BOOL bErr = NO;
NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
if(imageView.image==[UIImage imageNamed:@"noimage.jpeg"]) {
msgStr = @"Choose an Image";
bErr = YES;
}
else if(nameField.text.length == 0) {
msgStr = @"Please provide your name";
bErr = YES;
[nameField becomeFirstResponder];
}
else if(districtField.text.length == 0) {
msgStr = @"Please provide your District";
bErr = YES;
[districtField becomeFirstResponder];
}else if(emailField.text.length == 0) {
msgStr = @"Please provide your email";
bErr = YES;
[emailField becomeFirstResponder];
}
else if ([emailTest evaluateWithObject:emailField.text] == NO)
{
msgStr = @"Invalid Email Id! Please try again";
bErr = YES;
[emailField becomeFirstResponder];
}
if(bErr) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:msgStr delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
//[alert release];
return;
}
NSData *ImageData1 = UIImageJPEGRepresentation(imageView.image, 0.9);
if([currentDefaults objectForKey:@"edit"]){
NSLog(@"Hiqqq- %d",p);
[imageArray replaceObjectAtIndex:p withObject:ImageData1];
[nameArray replaceObjectAtIndex:p withObject:nameField.text];
[distrctArray replaceObjectAtIndex:p withObject:districtField.text];
[emailArray replaceObjectAtIndex:p withObject:emailField.text];
[mobileArray replaceObjectAtIndex:p withObject:mobileField.text];
}else{
[imageArray addObject:ImageData1];
[nameArray addObject:nameField.text];
[distrctArray addObject:districtField.text];
[emailArray addObject:emailField.text];
[mobileArray addObject:mobileField.text];
}
[currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:imageArray] forKey:@"savedImage"];
[currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:nameArray] forKey:@"savedName"];
[currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:distrctArray] forKey:@"savedDt"];
[currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:emailArray] forKey:@"savedEmail"];
[currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:mobileArray] forKey:@"savedMobile"];
//[[NSUserDefaults standardUserDefaults] synchronize];
[self print];
imageView.image=[UIImage imageNamed:@"noimage.jpeg"];
nameField.text=@"";
districtField.text=@"";
emailField.text=@"";
mobileField.text=@"";
}
-(void)print{
if (![UIPrintInteractionController isPrintingAvailable]) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Printer Availability Error Title", @"")
message:NSLocalizedString(@"Printer Availability Error Message", @"")
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"OK")
otherButtonTitles:nil];
[alertView show];
return;
}
UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
if(!pic) {
NSLog(@"Couldn't get shared UIPrintInteractionController!");
return;
}
pic.delegate = self;
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = @"Sample";
pic.printInfo = printInfo;
NSString *htmlString = [self prepareHTMLText];
UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:htmlString];
htmlFormatter.startPage = 0;
htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1-inch margins on all sides
htmlFormatter.maximumContentWidth = 6 * 72.0; // printed content should be 6-inches wide within those margins
pic.printFormatter = htmlFormatter;
pic.showsPageRange = YES;
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if (!completed && error) {
NSLog(@"Printing could not complete because of error: %@", error);
}
};
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// [pic presentFromBarButtonItem:self.myPrintBarButton animated:YES completionHandler:completionHandler];
} else {
[pic presentAnimated:YES completionHandler:completionHandler];
}
}
- (NSString *)prepareHTMLText {
NSMutableString *body = [NSMutableString stringWithString:@"<!DOCTYPE html><html><body>"];
NSString *str1 = [Base64 encode:UIImagePNGRepresentation(imageView.image)];
[body appendString:@"<h2>ID Card</h2>"];
[body appendFormat:@"<img src=\"data:image/png;base64,%@\" alt=\"\" height=\"100\" width=\"100\"/>",str1];
[body appendFormat:@"<p>%@ %@</p>", nameField.text, districtField.text];
[body appendString:@"</body></html>"];
return body;
}
-(IBAction)list:(id)sender{
DetailViewController *anotherViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"anotherViewController22"];
// [UIView beginAnimations:nil context:NULL];
// [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:YES];
//[UIView setAnimationDuration:.8];
[self.navigationController pushViewController:anotherViewController animated:YES];
//[anotherViewController release];
//[UIView commitAnimations];
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"edit"];
imageView.image=[UIImage imageNamed:@"noimage.jpeg"];
nameField.text=@"";
districtField.text=@"";
emailField.text=@"";
mobileField.text=@"";
}
@end