ViewController.h
#import <UIKit/UIKit.h>
#import “NewViewController.h”
#import “UserDetailDataModel.h”
@interface ViewController : UIViewController<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *textFieldCurrent;
@property (weak, nonatomic) IBOutlet UITextField *textFieldFirstName;
@property (weak, nonatomic) IBOutlet UITextField *textFieldLastName;
@property (weak, nonatomic) IBOutlet UITextField *textFieldPhoneNumber;
@property (weak, nonatomic) IBOutlet UITextField *textFieldCity;
@property (weak, nonatomic) IBOutlet UIScrollView *scrollViewSignUp;
– (IBAction)buttonActionSubmit:(id)sender;
– (IBAction)buttonActionCancel:(id)sender;
@end
ViewController.m
#import “ViewController.h”
@interface ViewController ()
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
UITapGestureRecognizer *aGest = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected)];
aGest.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:aGest];
// Do any additional setup after loading the view, typically from a nib.
}
– (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillHideNotification
object:nil];
}
– (IBAction)buttonActionSubmit:(id)sender
{
NSLog(@”buttonActionSubmit”);
UserDetailDataModel *aUserDetailDataModel = [UserDetailDataModel new];
aUserDetailDataModel.FirstName = self.textFieldFirstName.text;
aUserDetailDataModel.LastName = self.textFieldLastName.text;
aUserDetailDataModel.PhoneNumber = self.textFieldPhoneNumber.text;
aUserDetailDataModel.City = self.textFieldCity.text;
NewViewController *aNewViewController = [self.storyboard instantiateViewControllerWithIdentifier:@”NewViewController”];
aNewViewController.bUserDetailDataModel = aUserDetailDataModel;
[self.navigationController pushViewController:aNewViewController animated:YES];
}
– (IBAction)buttonActionCancel:(id)sender
{
NSLog(@”buttonActionCancel”);
[self resetAllTextField];
}
– (void)resetAllTextField
{
self.textFieldFirstName.text = nil;
self.textFieldLastName.text = nil;
self.textFieldPhoneNumber.text = nil;
self.textFieldCity.text = nil;
}
#pragma mark – Gester method
– (void)tapDetected {
[self.textFieldCurrent resignFirstResponder];
}
#pragma mark – UIKeyboard show/hide notification
– (void)keyboardWillShow:(NSNotification *)iNotification {
NSLog(@”%f”, [iNotification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height);
NSDictionary *aKeyInfo = iNotification.userInfo;
NSValue *aRectValue = [aKeyInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect aRect = [aRectValue CGRectValue];
if (self.textFieldCurrent.tag == 3 || self.textFieldCurrent.tag == 4)
{
self.scrollViewSignUp.contentOffset = CGPointMake(0, (aRect.size.height) – ([UIScreen mainScreen].bounds.size.height / 5.3));
}
}
– (void)keyboardWillHide:(NSNotification *)iNotification {
self.scrollViewSignUp.contentOffset = CGPointMake(0, 0);
}
#pragma mark – UITextField delegate
– (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
– (void)textFieldDidBeginEditing:(UITextField *)textField {
self.textFieldCurrent = textField;
}
@end
NewViewController.h
#import <UIKit/UIKit.h>
#import “UserDetailDataModel.h”
#import “Utility.h”
@interface NewViewController : UIViewController
@property (strong, nonatomic) UserDetailDataModel *bUserDetailDataModel;
– (IBAction)buttonActionBack:(id)sender;
@end
NewViewController.m
#import “NewViewController.h”
@interface NewViewController ()
@end
@implementation NewViewController
– (void)viewDidLoad {
[super viewDidLoad];
NSLog(@”%@”,self.bUserDetailDataModel);
NSLog(@”%@”,[self.bUserDetailDataModel asMutableDictionaryUserDetailDataModel]);
NSLog(@”%@”,[Utility descriptionForObject:self.bUserDetailDataModel]);
// Do any additional setup after loading the view.
}
– (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark – Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
– (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
– (IBAction)buttonActionBack:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
@end
UserDetailDataModel.h
#import <Foundation/Foundation.h>
@interface UserDetailDataModel : NSObject
@property (strong, nonatomic) NSString *FirstName;
@property (strong, nonatomic) NSString *LastName;
@property (strong, nonatomic) NSString *PhoneNumber;
@property (strong, nonatomic) NSString *City;
– (NSMutableDictionary *)asMutableDictionaryUserDetailDataModel;
@end
UserDetailDataModel.m
#import “UserDetailDataModel.h”
@implementation UserDetailDataModel
– (NSMutableDictionary *)asMutableDictionaryUserDetailDataModel
{
NSMutableDictionary *aDictionaryUserDetailDataModel = [NSMutableDictionary new];
[aDictionaryUserDetailDataModel setObject:(self.FirstName == nil ? @””:self.FirstName) forKey:@”FirstName”];
[aDictionaryUserDetailDataModel setObject:(self.LastName == nil ? @””:self.LastName) forKey:@”LastName”];
[aDictionaryUserDetailDataModel setObject:(self.PhoneNumber == nil ? @””:self.PhoneNumber) forKey:@”PhoneNumber”];
[aDictionaryUserDetailDataModel setObject:(self.City == nil ? @””:self.City) forKey:@”City”];
return aDictionaryUserDetailDataModel;
}
@end
Utility.h
#import <Foundation/Foundation.h>
@interface Utility : NSObject
+(NSString *)descriptionForObject:(id)objct;
@end
Utility.m
#import “Utility.h”
#import <objc/message.h>
@implementation Utility
+(NSString *)descriptionForObject:(id)objct
{
unsigned int varCount;
NSMutableString *descriptionString = [[NSMutableString alloc]init];
objc_property_t *vars = class_copyPropertyList(object_getClass(objct), &varCount);
for (int i = 0; i < varCount; i++)
{
objc_property_t var = vars[i];
const char* name = property_getName (var);
NSString *keyValueString = [NSString stringWithFormat:@”\n%@ = %@”,[NSString stringWithUTF8String:name],[objct valueForKey:[NSString stringWithUTF8String:name]]];
[descriptionString appendString:keyValueString];
}
free(vars);
return descriptionString;
}
@end
Download Sample Project From GitHub