DEV'S

Shopping List IOS App - Part 1

ViewController.h (Login)

//
//  ViewController.h
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *usernameTextField;
@property (weak, nonatomic) IBOutlet UITextField *passwordTextField;

@end

ViewController.m

//
//  ViewController.m
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

RegisterTableViewController.h

//
//  RegisterTableViewController.h
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "WebService.h"
#import "WebServiceDelegate.h"

@interface RegisterTableViewController : UITableViewController<WebServiceDelegate>
@property (weak, nonatomic) IBOutlet UITextField *firstNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *lastNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *userNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *passWordTextField;
@property (weak, nonatomic) IBOutlet UISegmentedControl *maleFemaleCtrl;
@property (weak, nonatomic) IBOutlet UISwitch *bizSelectionSwitch;
@property (weak, nonatomic) IBOutlet UISwitch *travelSelectionSwitch;
@property (weak, nonatomic) IBOutlet UISwitch *holidaySelectionSwitch;

@property WebService *webService;
@end

RegisterTableViewController.m

//
//  RegisterTableViewController.m
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import "RegisterTableViewController.h"

@interface RegisterTableViewController ()

@end

@implementation RegisterTableViewController

@synthesize firstNameTextField,lastNameTextField,userNameTextField,passWordTextField,maleFemaleCtrl,bizSelectionSwitch,holidaySelectionSwitch,travelSelectionSwitch;
@synthesize webService;
- (void)viewDidLoad {
    [super viewDidLoad];
    webService = [[WebService alloc]init];
    [webService setDelegate:self];
    
    
    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
    
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)saveButtonPressed:(id)sender {
    
    [firstNameTextField endEditing:YES];
    [lastNameTextField endEditing:YES];
    [userNameTextField endEditing:YES];
    [passWordTextField endEditing:YES];
    if ([holidaySelectionSwitch isOn]){
        
    }
    if ([travelSelectionSwitch isOn]){
        
    }
    if ([bizSelectionSwitch isOn]){
        
    }
    if ([maleFemaleCtrl selectedSegmentIndex] == 0){
        //Male
    }else{
        //Female
    }
    NSString *url = @"http://vasudevkumaran.com/app/registration";
    NSString *payLoad = [NSString stringWithFormat:@"username=%@&password=%@&firstname=%@&lastname=%@&gender=%@&is_business=%@&is_travel=%@&is_holidays=%@",userNameTextField.text,passWordTextField.text,firstNameTextField.text,lastNameTextField.text,@"1",@"1",@"1",@"1"];
    [webService serviceConnect:url withPayLoad:payLoad];
    
    //
}

-(void)getWebServiceResult:(NSDictionary *)result{
    if ([[result objectForKey:@"result"] isEqualToString:@"OK"]){
        //Success // Registration went well
        [self dismissViewControllerAnimated:YES completion:nil];
    }else{
        NSString *failMessage = [result objectForKey:@"message"];
        [self showAlertWithMessage:failMessage];
       
    }
}

-(void)showAlertWithMessage:(NSString *)message{
    //UIAlertController *alertController = UIAl
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Failed" message:message preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:nil];
    [alertController addAction:okAction];
    [self presentViewController:alertController animated:YES completion:nil];
}

/*
#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
#warning Incomplete implementation, return the number of sections
    return 0;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete implementation, return the number of rows
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath];
    
    // Configure the cell…
    
    return cell;
}
*/

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

/*
#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.
}
*/

@end

WebService.h

//
//  WebService.h
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "WebServiceDelegate.h"

@interface WebService : NSObject

@property id<WebServiceDelegate> delegate;

-(void)serviceConnect:(NSString *)url withPayLoad:(NSString *)payload;

@end

WebService.m

//
//  WebService.m
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import "WebService.h"

@implementation WebService

@synthesize delegate;

-(void)serviceConnect:(NSString *)url withPayLoad:(NSString *)payload{
    //?username=vasudev&password=asfdasfh&firstname=Vasudev
    NSURL *webUrl = [NSURL URLWithString:url];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:webUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:250];
    
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/x-www-form-urlencoded"
forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:[payload dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *resultData, NSURLResponse *resp, NSError *error){
        
        NSHTTPURLResponse *respHttp = (NSHTTPURLResponse *)resp;
        if(respHttp.statusCode == 200){
            NSError *readError;
            NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData:resultData options:NSJSONReadingMutableContainers error:&readError];
            NSLog(@"%@",resultDict);
            dispatch_async(dispatch_get_main_queue(), ^(void){
                //forground thread
                [delegate getWebServiceResult:resultDict];
            });
        }
        
    }];
    
    [task resume];
    
    
}
@end

WebServiceDelegate.h

//
//  WebServiceDelegate.h
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol WebServiceDelegate <NSObject>
-(void)getWebServiceResult:(NSDictionary *)result;
@end

ShoppingItemsViewController.h

//
//  ShoppingItemsViewController.h
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ShoppingItemsViewController : UITableViewController

@end

ShoppingItemsViewController.m

//
//  ShoppingItemsViewController.m
//  Shopping App
//
//  Created by Vasudev Kumaran on 15/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

#import "ShoppingItemsViewController.h"

@interface ShoppingItemsViewController ()

@end

@implementation ShoppingItemsViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //is logged in
    // present Another viewcontroller
    
    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
    
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
#warning Incomplete implementation, return the number of sections
    return 0;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete implementation, return the number of rows
    return 0;
}

/*
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath];
    
    // Configure the cell…
    
    return cell;
}
*/

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

/*
#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.
}
*/

@end

Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>$(DEVELOPMENT_LANGUAGE)</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>

iOS

2017-12-19 00:07:26
1) CoreData - UIDatePicker - Part2 - Final
2017-12-18 23:29:30
2) CoreData - UIDatePicker - Part1
2017-12-18 05:09:33
3) Shopping List App - Swift Part 2 - ActionSheet
2017-12-18 03:22:51
4) Shopping List App - Swift Part 1
2017-12-17 23:34:49
5) Swift - Introduction - WebService
2017-12-15 03:30:23
6) Shopping List IOS App - Part 2
2017-12-15 01:21:10
7) Shopping List IOS App - Part 1
2017-12-14 21:58:22
8) Shopping List IOS App - API Calls
2017-12-14 03:48:37
9) Delegate - Protocols - WebService
2017-12-13 04:28:23
10) NSMutableArray - NSMutableDictionary - TableViewController
2017-12-13 02:47:13
11) UITableViewController
2017-12-12 22:59:32
12) Segue Forward And Unwind
2016-02-27 03:20:22
13) GoogleMap Addon
2016-02-26 04:06:38
14) UILocalNotification With NSNotificationCenter
2016-02-25 03:51:07
15) CLLocationManager Example
2016-02-24 03:27:59
16) UIImagePickerController Using Camera And PhotoLibrary
2016-02-23 02:08:19
17) Multi Section UITableView - UIPickerView
2016-02-18 03:16:09
18) Hello World IOS App Using Swift
2016-02-17 03:10:24
19) Swift Programming Language - Playground
2016-02-15 02:06:55
20) TabBar Controller
2016-02-15 02:06:55
21) Understanding Auto Layout and Layout Constraints
2016-02-10 22:56:12
22) Shopping List App - Cloud - Part 3 - Final
2016-02-09 04:12:06
23) Shopping List App - Cloud - Part 2
2016-02-08 03:21:52
24) Shopping List App - Cloud - Part 1
2016-02-05 03:24:01
25) Protocol And Delegates With NSURLSession
2016-02-04 00:59:51
26) Webservice Using NSURLSession
2016-02-02 02:09:13
27) UIPickerView Addon - InputView And AccessoryView For UITextField
2016-02-02 02:07:12
28) Protocol And Delegates
2016-02-01 00:37:02
29) UIPickerView - Add Programmatically
2016-01-30 00:52:48
30) NSUserDefaults - UIAlertControler - Back Navigation Title Change
2016-01-29 02:01:06
31) CoreData - StudentsRecord App
2016-01-27 21:54:28
32) Manual Segue
2016-01-27 00:04:21
33) TableViewController Example
2016-01-25 02:08:16
34) NSArray And NSDictionary
2016-01-23 03:23:10
35) Reverse (Unwind) Segue
2016-01-22 00:56:28
36) ViewController - Segue - Messages
2014-12-22 05:29:28
37) WebService Example
2014-12-22 05:16:57
38) CoreData Example

© Vasudev.H / Email: tech3in@live.com