├── Task Ticker
├── Checklist
│ ├── en.lproj
│ │ ├── InfoPlist.strings
│ │ └── MainStoryboard.storyboard
│ ├── Default.png
│ ├── Default@2x.png
│ ├── Default-568h@2x.png
│ ├── Task Ticker-Prefix.pch
│ ├── main.m
│ └── Task Ticker-Info.plist
├── Icon.png
├── Icon-60.png
├── Icon@2x.png
├── Icon-60@2x.png
├── Icon-Small.png
├── Icon-Small-40.png
├── Icon-Small@2x.png
├── Icon-Small-40@2x.png
├── Resources
│ ├── No Icon.png
│ ├── No Icon@2x.png
│ ├── checkbox.png
│ ├── checkbox@2x.png
│ ├── list-item-bg.png
│ ├── Toggle_Divider.png
│ ├── blue-background.jpg
│ ├── blue-bar-button.png
│ ├── blue-menu-bar.png
│ ├── list-item-bg@2x.png
│ ├── Toggle_Divider@2x.png
│ ├── blue-back-button.png
│ ├── blue-menu-bar@2x.png
│ ├── checkbox-checked.png
│ ├── blue-back-button@2x.png
│ ├── blue-background@2x.jpg
│ ├── blue-bar-button@2x.png
│ ├── checkbox-checked@2x.png
│ ├── detaildisclosure-new.png
│ └── detaildisclosure-new@2x.png
├── Task Ticker.xcodeproj
│ ├── xcuserdata
│ │ ├── Kalai.xcuserdatad
│ │ │ ├── xcdebugger
│ │ │ │ └── Breakpoints.xcbkptlist
│ │ │ └── xcschemes
│ │ │ │ ├── xcschememanagement.plist
│ │ │ │ └── Checklist.xcscheme
│ │ ├── parthobiswas.xcuserdatad
│ │ │ └── xcschemes
│ │ │ │ ├── xcschememanagement.plist
│ │ │ │ └── Task Ticker.xcscheme
│ │ └── partho.xcuserdatad
│ │ │ └── xcschemes
│ │ │ ├── xcschememanagement.plist
│ │ │ ├── Checklist.xcscheme
│ │ │ └── Task Ticker - App Store.xcscheme
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcuserdata
│ │ │ ├── Kalai.xcuserdatad
│ │ │ ├── UserInterfaceState.xcuserstate
│ │ │ └── WorkspaceSettings.xcsettings
│ │ │ ├── partho.xcuserdatad
│ │ │ ├── UserInterfaceState.xcuserstate
│ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── parthobiswas.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── project.pbxproj
└── Classes
│ ├── DataModel.h
│ ├── DALinedTextView
│ ├── DALinedTextView.h
│ └── DALinedTextView.m
│ ├── AppDelegate.h
│ ├── DatePickerViewController.h
│ ├── ChecklistItem.h
│ ├── ChecklistViewController.h
│ ├── DataModel.m
│ ├── UIPickerActionSheet
│ ├── UIPickerActionSheet.h
│ └── UIPickerActionSheet.m
│ ├── DatePickerViewController.m
│ ├── AddItemViewController.h
│ ├── ChecklistItem.m
│ ├── AppDelegate.m
│ ├── AddItemViewController.m
│ └── ChecklistViewController.m
└── README.md
/Task Ticker/Checklist/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/Task Ticker/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Icon.png
--------------------------------------------------------------------------------
/Task Ticker/Icon-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Icon-60.png
--------------------------------------------------------------------------------
/Task Ticker/Icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Icon@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Icon-60@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Icon-Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Icon-Small.png
--------------------------------------------------------------------------------
/Task Ticker/Icon-Small-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Icon-Small-40.png
--------------------------------------------------------------------------------
/Task Ticker/Icon-Small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Icon-Small@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Checklist/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Checklist/Default.png
--------------------------------------------------------------------------------
/Task Ticker/Icon-Small-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Icon-Small-40@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/No Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/No Icon.png
--------------------------------------------------------------------------------
/Task Ticker/Checklist/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Checklist/Default@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/No Icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/No Icon@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/checkbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/checkbox.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/checkbox@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/checkbox@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/list-item-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/list-item-bg.png
--------------------------------------------------------------------------------
/Task Ticker/Checklist/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Checklist/Default-568h@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/Toggle_Divider.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/Toggle_Divider.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/blue-background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/blue-background.jpg
--------------------------------------------------------------------------------
/Task Ticker/Resources/blue-bar-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/blue-bar-button.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/blue-menu-bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/blue-menu-bar.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/list-item-bg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/list-item-bg@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/Toggle_Divider@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/Toggle_Divider@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/blue-back-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/blue-back-button.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/blue-menu-bar@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/blue-menu-bar@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/checkbox-checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/checkbox-checked.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/blue-back-button@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/blue-back-button@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/blue-background@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/blue-background@2x.jpg
--------------------------------------------------------------------------------
/Task Ticker/Resources/blue-bar-button@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/blue-bar-button@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/checkbox-checked@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/checkbox-checked@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/detaildisclosure-new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/detaildisclosure-new.png
--------------------------------------------------------------------------------
/Task Ticker/Resources/detaildisclosure-new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Resources/detaildisclosure-new@2x.png
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/xcuserdata/Kalai.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/xcuserdata/Kalai.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/xcuserdata/Kalai.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/xcuserdata/partho.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/xcuserdata/partho.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/xcuserdata/parthobiswas.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/partho-maple/Task-Ticker_Obj-C/HEAD/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/xcuserdata/parthobiswas.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Task Ticker/Checklist/Task Ticker-Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'Checklist' target in the 'Checklist' project
3 | //
4 |
5 | #import
6 |
7 | #ifndef __IPHONE_5_0
8 | #warning "This project uses features only available in iOS SDK 5.0 and later."
9 | #endif
10 |
11 | #ifdef __OBJC__
12 | #import
13 | #import
14 | #endif
15 |
--------------------------------------------------------------------------------
/Task Ticker/Checklist/main.m:
--------------------------------------------------------------------------------
1 |
2 | //
3 | // main.m
4 | // Checklist
5 | //
6 | // Created by Partho Biswas on 8/7/13.
7 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
8 | //
9 |
10 | #import
11 |
12 | #import "AppDelegate.h"
13 |
14 | int main(int argc, char *argv[])
15 | {
16 | @autoreleasepool {
17 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/DataModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // DataModel.h
3 | // Task List
4 | //
5 | // Created by Partho Biswas on 9/9/12.
6 | // Copyright (c) 2012 Partho Biswas. All rights reserved.
7 | //
8 |
9 |
10 | #import
11 |
12 | @interface DataModel : NSObject
13 |
14 |
15 |
16 | /// We declare nextChecklistItemId method to assign an ID for each notification scheduled.
17 |
18 | + (int)nextChecklistItemId;
19 |
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/xcuserdata/Kalai.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges
6 |
7 | SnapshotAutomaticallyBeforeSignificantChanges
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/project.xcworkspace/xcuserdata/partho.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges
6 |
7 | SnapshotAutomaticallyBeforeSignificantChanges
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/DALinedTextView/DALinedTextView.h:
--------------------------------------------------------------------------------
1 | //
2 | // DALinedTextView.h
3 | // DALinedTextView
4 | //
5 | // Created by Daniel Amitay on 5/12/13.
6 | // Copyright (c) 2013 Daniel Amitay. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface DALinedTextView : UITextView
12 |
13 | @property (nonatomic, strong) UIColor *horizontalLineColor UI_APPEARANCE_SELECTOR;
14 | @property (nonatomic, strong) UIColor *verticalLineColor UI_APPEARANCE_SELECTOR;
15 |
16 | @property (nonatomic) UIEdgeInsets margins UI_APPEARANCE_SELECTOR;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // Checklist
4 | //
5 | // Created by Partho Biswas on 8/7/13.
6 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 |
16 | ///declare "customizeAppearance" method. once application finished launching, we call customizeAppearance method. customizeAppearance is responsible to theme the app. Implemented in .m file
17 |
18 | -(void)customizeAppearance;
19 |
20 |
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/xcuserdata/Kalai.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Checklist.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | A66CF937178A615500C582E1
16 |
17 | primary
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/xcuserdata/parthobiswas.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Task Ticker.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | A66CF937178A615500C582E1
16 |
17 | primary
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/xcuserdata/partho.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Checklist.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 | Task Ticker - App Store.xcscheme
13 |
14 | orderHint
15 | 1
16 |
17 |
18 | SuppressBuildableAutocreation
19 |
20 | A66CF937178A615500C582E1
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/DatePickerViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // DatePickerViewController.h
3 | // Task List
4 | //
5 | // Created by Partho Biswas on 12/9/12.
6 | // Copyright (c) 2012 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 |
12 | @class DatePickerViewController;
13 |
14 | @protocol DatePickerViewControllerDelegate
15 |
16 | - (void)datePickerDidCancel:(DatePickerViewController *)picker;
17 | - (void)datePicker:(DatePickerViewController *)picker didPickDate:(NSDate *)date;
18 |
19 | @end
20 |
21 | @interface DatePickerViewController : UIViewController
22 |
23 | @property (nonatomic, strong) IBOutlet UITableView *tableView;
24 | @property (nonatomic, strong) IBOutlet UIDatePicker *datePicker;
25 | @property (nonatomic, weak) id delegate;
26 | @property (nonatomic, strong) NSDate *date;
27 |
28 | - (IBAction)cancel;
29 | - (IBAction)done;
30 | - (IBAction)dateChanged;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Task Ticker
2 |
3 |
4 | Source code for this app: https://itunes.apple.com/us/app/task-ticker-lite/id717509889?mt=8
5 |
6 |
7 | ***List-making made simple!***
8 |
9 | Keep ALL your lists in one place.This effective to-do list lets you keep track of everything you need to do. Organise tasks in your own to-do lists. Task Ticker is a very customisable to-do list with lots of settings. Actions can be assigned to buttons and swipe movements to make the app behave like you want. Tick them off when done.
10 |
11 |
12 |
13 | It does the following things:
14 |
15 |
16 | -Organise tasks
17 |
18 | -To do list & Shopping list
19 |
20 | -Get things done (GTD)
21 |
22 | -Organise your schedule by note in calendar
23 |
24 | -Reminder notes on status bar
25 |
26 | -Search notes
27 |
28 | -Powerful Reminder : Time Alarm, All day, Repetition.
29 |
30 | -Quick memo / notes
31 |
32 | -Share notes via SMS, email, twitter
33 |
34 | -Gesture based operation (swipe to cross)
-Designed to be quick and unobtrusive
35 |
36 |
37 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/ChecklistItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // Checklist
4 | //
5 | // Created by Partho Biswas on 8/7/13.
6 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "DataModel.h"
11 |
12 |
13 | @interface ChecklistItem : NSObject
14 |
15 | ///declare propertis of the items we want to store
16 |
17 | @property (nonatomic, copy) NSString *text;
18 | @property (nonatomic, assign) BOOL checked;
19 | @property (nonatomic, copy) NSString *notes;
20 |
21 | @property (nonatomic, copy) NSString *priority;
22 | @property (nonatomic, copy) NSString *priorityToDisplay;
23 |
24 | @property (nonatomic, copy) NSDate *dueDate;
25 | @property (nonatomic, assign) BOOL shouldRemind;
26 | @property (nonatomic, assign) int itemId;
27 |
28 |
29 |
30 | ///declare method to schedule local notification
31 | - (void)scheduleNotification;
32 |
33 | ///declare method when user tap on an item to mark it as compelted
34 | - (void)toggleChecked;
35 |
36 |
37 | @end
--------------------------------------------------------------------------------
/Task Ticker/Classes/ChecklistViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // Checklist
4 | //
5 | // Created by Partho Biswas on 8/7/13.
6 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "AddItemViewController.h"
11 | #import
12 | #import
13 |
14 |
15 |
16 | @interface ChecklistViewController : UITableViewController
17 | {
18 | ///declare tableview and banner view for iAd banner
19 |
20 | UITableView *TableView;
21 |
22 | ADBannerView *bannerView;
23 | }
24 |
25 |
26 | //declare property of tableview. So that we can define whether the iAd panel shall be shown as header of table view or footer of table view.
27 |
28 | @property (nonatomic, retain) IBOutlet UITableView *TableView;
29 |
30 |
31 |
32 | ///declare property for activitycontroller to show whenuser tap on search button
33 | @property (nonatomic, strong) UIActivityViewController *activityViewController;
34 |
35 | ///create a property for action to be called when user tap on sharebutton
36 | -(IBAction) shareButtonClicked:(id)sender;
37 |
38 |
39 |
40 | ///declare NSMutableArray property for filtered table data
41 | @property (strong, nonatomic) NSMutableArray* filteredTableData;
42 |
43 | ///declare property for searchbar
44 | @property (weak, nonatomic) IBOutlet UISearchBar *searchBar;
45 |
46 | ///create a property to check the status
47 | @property (nonatomic, assign) bool isFiltered;
48 |
49 |
50 |
51 |
52 | @end
53 |
--------------------------------------------------------------------------------
/Task Ticker/Checklist/Task Ticker-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ${PRODUCT_NAME}
9 | CFBundleExecutable
10 | ${EXECUTABLE_NAME}
11 | CFBundleIcons
12 |
13 | CFBundlePrimaryIcon
14 |
15 | CFBundleIconFiles
16 |
17 | Icon-Small-40
18 | Icon-Small
19 | Icon
20 | Icon-60
21 | Icon.png
22 | Icon@2x.png
23 |
24 |
25 |
26 | CFBundleIdentifier
27 | com.CodeClef.Task-Ticker
28 | CFBundleInfoDictionaryVersion
29 | 6.0
30 | CFBundleName
31 | ${PRODUCT_NAME}
32 | CFBundlePackageType
33 | APPL
34 | CFBundleShortVersionString
35 | 1.1
36 | CFBundleSignature
37 | ????
38 | CFBundleVersion
39 | 1.1
40 | LSRequiresIPhoneOS
41 |
42 | UIMainStoryboardFile
43 | MainStoryboard
44 | UIRequiredDeviceCapabilities
45 |
46 | armv7
47 |
48 | UISupportedInterfaceOrientations
49 |
50 | UIInterfaceOrientationPortrait
51 | UIInterfaceOrientationPortraitUpsideDown
52 | UIInterfaceOrientationLandscapeLeft
53 | UIInterfaceOrientationLandscapeRight
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/DataModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // DataModel.m
3 | // Task List
4 | //
5 | // Created by Partho Biswas on 9/9/12.
6 | // Copyright (c) 2012 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import "DataModel.h"
10 |
11 |
12 | @implementation DataModel
13 |
14 |
15 |
16 | ///register defaults for the application. We declare yes to firsttime and id for location notification to zero.
17 |
18 | - (void)registerDefaults
19 | {
20 | NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
21 | [NSNumber numberWithBool:YES], @"FirstTime",
22 | [NSNumber numberWithInt:0], @"ChecklistItemId",
23 | nil];
24 | [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
25 | }
26 |
27 |
28 |
29 | ///When the app run first time, we need to change the user default for "firstrun" to NO.
30 |
31 | - (void)handleFirstTime
32 | {
33 | BOOL firstTime = [[NSUserDefaults standardUserDefaults] boolForKey:@"FirstTime"];
34 | if (firstTime) {
35 |
36 | [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"FirstTime"];
37 |
38 | }
39 | }
40 |
41 |
42 | ///Once loaded we call the following methods to check whether first time or subsequent time loading.
43 |
44 | - (id)init
45 | {
46 | if ((self = [super init])) {
47 | [self registerDefaults];
48 | [self handleFirstTime];
49 | }
50 | return self;
51 | }
52 |
53 |
54 | ///Here we assign the ID for first checklist createdto 0 and for each checklist generated subsequently will add incremental of 1.
55 |
56 | + (int)nextChecklistItemId
57 | {
58 | NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
59 | int itemId = [userDefaults integerForKey:@"ChecklistItemId"];
60 | [userDefaults setInteger:itemId + 1 forKey:@"ChecklistItemId"];
61 | [userDefaults synchronize];
62 | return itemId;
63 | }
64 |
65 |
66 | @end
67 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/UIPickerActionSheet/UIPickerActionSheet.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIPickerActionSheet.h
3 | // Version 0.1
4 | //
5 | // This code is distributed under the terms and conditions of the MIT license.
6 | //
7 | // Copyright (c) 2013 José Enrique Bolaños Gudiño
8 | //
9 | // Permission is hereby granted, free of charge, to any person obtaining a copy
10 | // of this software and associated documentation files (the "Software"), to deal
11 | // in the Software without restriction, including without limitation the rights
12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 | // copies of the Software, and to permit persons to whom the Software is
14 | // furnished to do so, subject to the following conditions:
15 | //
16 | // The above copyright notice and this permission notice shall be included in
17 | // all copies or substantial portions of the Software.
18 | //
19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 | // THE SOFTWARE.
26 | //
27 |
28 | #import
29 |
30 | @protocol UIPickerActionSheetDelegate;
31 |
32 | @interface UIPickerActionSheet : NSObject
33 |
34 | @property (nonatomic, assign) id delegate;
35 | @property (nonatomic, strong) UIView *containerView;
36 | @property (nonatomic, strong) UIActionSheet *sheet;
37 | @property (nonatomic, strong) UIPickerView *picker;
38 | @property (nonatomic, strong) NSArray *items;
39 | @property (nonatomic, strong) id selectedItem;
40 |
41 | - (id)initForView:(UIView*)aView;
42 | - (void)show:(NSArray*)aItems;
43 |
44 | @end
45 |
46 | @protocol UIPickerActionSheetDelegate
47 | @optional
48 | - (void)pickerActionSheet:(UIPickerActionSheet*)aPickerActionSheet didSelectItem:(id)aItem;
49 | - (void)pickerActionSheetDidCancel:(UIPickerActionSheet*)aPickerActionSheet;
50 | @end
--------------------------------------------------------------------------------
/Task Ticker/Classes/DatePickerViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // DatePickerViewController.m
3 | // Task List
4 | //
5 | // Created by Partho Biswas on 12/9/12.
6 | // Copyright (c) 2012 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import "DatePickerViewController.h"
10 |
11 | @interface DatePickerViewController ()
12 |
13 | @end
14 |
15 | @implementation DatePickerViewController {
16 | UILabel *dateLabel;
17 | }
18 |
19 | @synthesize tableView;
20 | @synthesize datePicker;
21 | @synthesize delegate;
22 | @synthesize date;
23 |
24 |
25 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
26 | {
27 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
28 | if (self) {
29 | // Custom initialization
30 | }
31 | return self;
32 | }
33 |
34 |
35 | - (void)viewDidLoad
36 | {
37 | [super viewDidLoad];
38 |
39 | self.tableView.backgroundView = [[UIImageView alloc] initWithImage:
40 | [UIImage imageNamed:@"backgroundfordatepicker.png"]];
41 |
42 | self.title = NSLocalizedString(@"Choosedate", nil);
43 |
44 | datePicker.minimumDate = [NSDate date];
45 |
46 | }
47 |
48 |
49 |
50 |
51 | - (void)viewDidUnload
52 | {
53 | [super viewDidUnload];
54 | self.tableView = nil;
55 | self.datePicker = nil;
56 | dateLabel = nil;
57 |
58 |
59 | }
60 |
61 |
62 | - (IBAction)cancel
63 | {
64 | [self.delegate datePickerDidCancel:self];
65 | }
66 | - (IBAction)done
67 | {
68 | [self.delegate datePicker:self didPickDate:self.date];
69 | }
70 |
71 |
72 | - (void)viewWillAppear:(BOOL)animated
73 | {
74 | [super viewWillAppear:animated];
75 | [self.datePicker setDate:self.date animated:YES];
76 | }
77 |
78 |
79 |
80 | - (void)updateDateLabel
81 | {
82 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
83 | [formatter setDateStyle:NSDateFormatterFullStyle];
84 | [formatter setTimeStyle:NSDateFormatterShortStyle];
85 | dateLabel.text = [formatter stringFromDate:date];
86 | }
87 |
88 |
89 | - (IBAction)dateChanged
90 | {
91 | self.date = [self.datePicker date];
92 | [self updateDateLabel];
93 | }
94 |
95 |
96 |
97 |
98 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
99 | {
100 | return 1;
101 | }
102 |
103 |
104 |
105 | - (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
106 | {
107 | UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:@"DateCell"];
108 | dateLabel = (UILabel *)[cell viewWithTag:1000];
109 | [self updateDateLabel];
110 | return cell;
111 | }
112 | - (NSIndexPath *)tableView:(UITableView *)theTableView willSelectRowAtIndexPath
113 | :(NSIndexPath *)indexPath
114 | {
115 | return nil;
116 | }
117 |
118 |
119 |
120 | - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(
121 | NSInteger)section
122 | {
123 | return 77;
124 | }
125 |
126 | @end
127 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/xcuserdata/Kalai.xcuserdatad/xcschemes/Checklist.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
51 |
52 |
58 |
59 |
60 |
61 |
62 |
63 |
69 |
70 |
76 |
77 |
78 |
79 |
81 |
82 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/xcuserdata/partho.xcuserdatad/xcschemes/Checklist.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
51 |
52 |
58 |
59 |
60 |
61 |
62 |
63 |
69 |
70 |
76 |
77 |
78 |
79 |
81 |
82 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/xcuserdata/partho.xcuserdatad/xcschemes/Task Ticker - App Store.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
51 |
52 |
58 |
59 |
60 |
61 |
62 |
63 |
69 |
70 |
76 |
77 |
78 |
79 |
81 |
82 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/xcuserdata/parthobiswas.xcuserdatad/xcschemes/Task Ticker.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/AddItemViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // Checklist
4 | //
5 | // Created by Partho Biswas on 8/7/13.
6 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
7 | //
8 |
9 |
10 | #import
11 | #import "DatePickerViewController.h"
12 | #import "UIPickerActionSheet.h"
13 |
14 | ///declare delagate methods
15 |
16 | @class AddItemViewController;
17 | @class ChecklistItem;
18 |
19 | /// We pass the creted information to checkviewcontroller using delegate method.
20 | @protocol AddItemViewControllerDelegate
21 |
22 | ///This method declares when user tap on the cancel button, it will dismiss the additem view controller presenting without saving the data
23 | - (void)addItemViewControllerDidCancel:(AddItemViewController *)controller;
24 |
25 |
26 |
27 | ///This method pass the relevant "added" information such as task, notes, whether to remind to checklistview controller
28 | - (void)addItemViewController:(AddItemViewController *)controller didFinishAddingItem:(ChecklistItem *)item;
29 |
30 |
31 |
32 |
33 | ///This method pass the relevant "edited" information such as task, notes, whether to remind to checklistview controller
34 | - (void)addItemViewController:(AddItemViewController *)controller didFinishEditingItem:(ChecklistItem *)item;
35 | @end
36 |
37 |
38 | /// confirm that textfield, datpicker and actionsheet delegates to self
39 | @interface AddItemViewController : UITableViewController
40 |
41 |
42 | /// textField is a field where user key in the task information.
43 | @property (strong, nonatomic) IBOutlet UITextField *textField;
44 |
45 | /// notesField is a field where user key in the additional information.
46 | @property (strong, nonatomic) IBOutlet UITextView *notesField;
47 |
48 | /// We create doneBarButton as IBOutlet so that we can disable the done button if the text field is empty.
49 | @property (nonatomic, strong) IBOutlet UIBarButtonItem *doneBarButton;
50 |
51 | ///confirms delegate method
52 | @property (nonatomic, weak) id delegate;
53 |
54 | ///We declare itemtoedit method to display information for user to edit
55 | @property (nonatomic, strong) ChecklistItem *itemToEdit;
56 |
57 |
58 | ///we need a switch control for user to toggle whether notification is required
59 | @property (nonatomic, strong) IBOutlet UISwitch *switchControl;
60 |
61 | ///this is the notification time which user selects
62 | @property (nonatomic, strong) IBOutlet UILabel *dueDateLabel;
63 |
64 | ///We display the periority as per user selection
65 | @property (nonatomic, strong) IBOutlet UILabel *priorityLabel;
66 |
67 | ///the we present to user whether the priority is low, high or medium but we update as !, !! !!!. therefore we need another label
68 | @property (nonatomic, strong) IBOutlet UILabel *priorityLabelToDisplay;
69 |
70 | ///we use picker action sheet to display priority options. User can choose one of them. If the user didn't select any, priority will be set to none
71 | @property (nonatomic, strong) UIPickerActionSheet *pickerActionSheet;
72 |
73 |
74 | ///create IBActions
75 |
76 | ///We create cancel IBAction. when user tap on cancel button, we dismiss the presenting view controller by calling AddItemViewControllerDelegate using delegate method
77 | - (IBAction)cancel;
78 |
79 | ///We create done IBAction. when user tap done button, we dismiss the presenting view controller by calling didFinishAddingItem using delegate method which will pass the added/edited information to checklistviewcontroller
80 | - (IBAction)done;
81 |
82 | ///We record when the user change the switch
83 | - (IBAction)switchChanged:(UISwitch *)sender;
84 |
85 | ///When user tab on the priority label, we call this method and present uipicker action sheeet with priority options
86 | - (IBAction)priority:(id)sender;
87 |
88 | @end
--------------------------------------------------------------------------------
/Task Ticker/Classes/ChecklistItem.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // Checklist
4 | //
5 | // Created by Partho Biswas on 8/7/13.
6 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import "ChecklistItem.h"
10 | #import "DataModel.h"
11 |
12 | @implementation ChecklistItem
13 |
14 | ///synthesize the declared properties
15 |
16 | @synthesize text, checked, notes, priority, priorityToDisplay;
17 | @synthesize dueDate, shouldRemind, itemId;
18 |
19 |
20 | ///method to decode
21 |
22 |
23 | - (id)initWithCoder:(NSCoder *)aDecoder
24 | {
25 | if ((self = [super init])) {
26 | self.text = [aDecoder decodeObjectForKey:@"Text"];
27 | self.notes = [aDecoder decodeObjectForKey:@"Notes"];
28 | self.priority = [aDecoder decodeObjectForKey:@"Priority"];
29 | self.priorityToDisplay = [aDecoder decodeObjectForKey:@"PriorityToDisplay"];
30 | self.checked = [aDecoder decodeBoolForKey:@"Checked"];
31 | self.dueDate = [aDecoder decodeObjectForKey:@"DueDate"];
32 | self.shouldRemind = [aDecoder decodeBoolForKey:@"ShouldRemind"];
33 | self.itemId = [aDecoder decodeIntForKey:@"ItemID"];
34 | }
35 | return self;
36 | }
37 |
38 |
39 | ///method to encode
40 |
41 | - (void)encodeWithCoder:(NSCoder *)aCoder
42 | {
43 | [aCoder encodeObject:self.text forKey:@"Text"];
44 | [aCoder encodeObject:self.notes forKey:@"Notes"];
45 | [aCoder encodeObject:self.priority forKey:@"Priority"];
46 | [aCoder encodeObject:self.priorityToDisplay forKey:@"PriorityToDisplay"];
47 | [aCoder encodeBool:self.checked forKey:@"Checked"];
48 | [aCoder encodeObject:self.dueDate forKey:@"DueDate"];
49 | [aCoder encodeBool:self.shouldRemind forKey:@"ShouldRemind"];
50 | [aCoder encodeInt:self.itemId forKey:@"ItemID"];
51 | }
52 |
53 |
54 |
55 |
56 | ///method that records whether an item is checked
57 |
58 | - (void)toggleChecked
59 | {
60 | self.checked = !self.checked;
61 | }
62 |
63 |
64 | ///We need to assign an id for each item.
65 |
66 | - (id)init
67 | {
68 | if (self = [super init]) {
69 | self.itemId = [DataModel nextChecklistItemId];
70 | }
71 | return self;
72 | }
73 |
74 |
75 |
76 | ///We need to assign an id for each item so that we can easily identify.
77 | - (UILocalNotification *)notificationForThisItem
78 | {
79 | NSArray *allNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
80 | for (UILocalNotification *notification in allNotifications) {
81 | NSNumber *number = [notification.userInfo objectForKey:@"ItemID"];
82 | if (number != nil && [number intValue] == self.itemId) {
83 |
84 | return notification;
85 | }
86 | }
87 | return nil;
88 | }
89 |
90 |
91 | ///We schedule notification here for the selected item. If there is any existing notification for this item, we remove them so that only latest alarm time will be fired.
92 |
93 | - (void)scheduleNotification
94 | {
95 |
96 | UILocalNotification *existingNotification = [self notificationForThisItem];
97 | if (existingNotification != nil) {
98 |
99 | NSLog(@"Found an existing notification %@", existingNotification);
100 |
101 | [[UIApplication sharedApplication] cancelLocalNotification:[self notificationForThisItem]];
102 |
103 | }
104 |
105 |
106 |
107 | if (self.shouldRemind && [self.dueDate compare:[NSDate date]] != NSOrderedAscending) {
108 | UILocalNotification *localNotification = [[UILocalNotification alloc] init];
109 | localNotification.fireDate = self.dueDate;
110 | localNotification.timeZone = [NSTimeZone defaultTimeZone];
111 | localNotification.alertBody = self.text;
112 | localNotification.soundName = UILocalNotificationDefaultSoundName;
113 | localNotification.userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:self.itemId] forKey:@"ItemID"];
114 |
115 |
116 | [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
117 |
118 | NSLog(@"Scheduled notification %@ for itemId %d", localNotification, self.itemId);
119 | }
120 | }
121 |
122 |
123 |
124 |
125 | - (void)dealloc
126 | {
127 | UILocalNotification *existingNotification = [self notificationForThisItem];
128 | if (existingNotification != nil) {
129 | // NSLog(@"Removing existing notification %@", existingNotification);
130 | [[UIApplication sharedApplication] cancelLocalNotification:
131 | existingNotification];
132 | }
133 | }
134 |
135 |
136 |
137 |
138 |
139 | @end
140 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/UIPickerActionSheet/UIPickerActionSheet.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIPickerActionSheet.m
3 | // Version 0.1
4 | //
5 | // This code is distributed under the terms and conditions of the MIT license.
6 | //
7 | // Copyright (c) 2013 José Enrique Bolaños Gudiño
8 | //
9 | // Permission is hereby granted, free of charge, to any person obtaining a copy
10 | // of this software and associated documentation files (the "Software"), to deal
11 | // in the Software without restriction, including without limitation the rights
12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 | // copies of the Software, and to permit persons to whom the Software is
14 | // furnished to do so, subject to the following conditions:
15 | //
16 | // The above copyright notice and this permission notice shall be included in
17 | // all copies or substantial portions of the Software.
18 | //
19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 | // THE SOFTWARE.
26 | //
27 |
28 | #import "UIPickerActionSheet.h"
29 |
30 | @interface UIPickerActionSheet ()
31 |
32 | - (void)initSheetWithWidth:(CGFloat)aWidth;
33 |
34 | @end
35 |
36 | @implementation UIPickerActionSheet
37 |
38 | - (id)initForView:(UIView*)aView
39 | {
40 | if (self = [super init])
41 | {
42 | self.containerView = aView;
43 | [self initSheetWithWidth:aView.bounds.size.width];
44 | }
45 | return self;
46 | }
47 |
48 | - (void)initSheetWithWidth:(CGFloat)aWidth
49 | {
50 | UIActionSheet *sheet = [[UIActionSheet alloc] init];
51 |
52 | UIToolbar *toolbar = [[UIToolbar alloc]
53 | initWithFrame:CGRectMake(0, 0, aWidth, 0)];
54 | toolbar.barStyle = UIBarStyleBlackOpaque;
55 | [toolbar sizeToFit];
56 |
57 | [toolbar setItems:@[
58 | [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(pickerSheetCancel)],
59 | [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
60 | [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(pickerSheetDone)]
61 | ]];
62 |
63 | UIPickerView *picker = [[UIPickerView alloc]
64 | initWithFrame:CGRectMake(0, toolbar.bounds.size.height, aWidth, 0)];
65 | picker.showsSelectionIndicator = YES;
66 | picker.delegate = self;
67 |
68 | [sheet addSubview:toolbar];
69 | [sheet addSubview:picker];
70 |
71 | self.sheet = sheet;
72 | self.picker = picker;
73 | }
74 |
75 | - (void)show:(NSArray*)aItems
76 | {
77 | self.items = aItems;
78 |
79 | // Do not show if items are invalid...
80 | if (!self.items || self.items.count <= 0)
81 | return;
82 |
83 | [self.sheet showInView:self.containerView];
84 |
85 | // XXX: Kinda hacky, but seems to be the only way to make it display correctly.
86 | [self.sheet
87 | setBounds:CGRectMake(0, 0,
88 | self.containerView.frame.size.width,
89 | self.sheet.frame.size.height + 478.0)];
90 |
91 | // Reload and select first item
92 | [self.picker reloadComponent:0];
93 | [self.picker selectRow:0 inComponent:0 animated:NO];
94 | [self.picker.delegate pickerView:self.picker didSelectRow:0 inComponent:0];
95 | }
96 |
97 | - (int)numberOfComponentsInPickerView:(UIPickerView*)aPickerView
98 | {
99 | return 1;
100 | }
101 |
102 | - (int)pickerView:(UIPickerView*)aPickerView numberOfRowsInComponent:(NSInteger)aComponent
103 | {
104 | return self.items.count;
105 | }
106 |
107 | - (NSString*)pickerView:(UIPickerView*)aPickerView titleForRow:(NSInteger)aRow forComponent:(NSInteger)aComponent
108 | {
109 | id item = [self.items objectAtIndex:aRow];
110 | return [item description];
111 | }
112 |
113 | - (void)pickerView:(UIPickerView*)aPickerView didSelectRow:(NSInteger)aRow inComponent:(NSInteger)aComponent
114 | {
115 | self.selectedItem = [self.items objectAtIndex:aRow];
116 | }
117 |
118 | - (void)pickerSheetCancel
119 | {
120 | [self.sheet dismissWithClickedButtonIndex:0 animated:YES];
121 | if (self.delegate && [self.delegate respondsToSelector:@selector(pickerActionSheetDidCancel:)])
122 | [self.delegate pickerActionSheetDidCancel:self];
123 | }
124 |
125 | - (void)pickerSheetDone
126 | {
127 | [self.sheet dismissWithClickedButtonIndex:0 animated:YES];
128 | if (self.delegate && [self.delegate respondsToSelector:@selector(pickerActionSheet:didSelectItem:)])
129 | [self.delegate pickerActionSheet:self didSelectItem:self.selectedItem];
130 | }
131 |
132 | @end
133 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // Checklist
4 | //
5 | // Created by Partho Biswas on 8/7/13.
6 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @implementation AppDelegate
12 |
13 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
14 | {
15 | // Override point for customization after application launch.
16 |
17 |
18 | /// once application finished launching, we call customizeAppearance method. customizeAppearance is responsible to theme the app
19 |
20 | //[self customizeAppearance];
21 |
22 |
23 | return YES;
24 | }
25 |
26 |
27 | /// customizing navigation bar and its items
28 |
29 | -(void)customizeAppearance
30 | {
31 | ///The UINavigationBar class implements a control for navigating hierarchical content. It’s a bar, typically displayed at the top of the screen, containing buttons for navigating up and down a hierarchy. The primary properties are a left (back) button, a center title, and an optional right button. You can specify custom views for each of these. You can modify the appearance of the bar using the barStyle, tintColor, and translucent properties. These properties affect the visual appearance of the bar itself but they also affect the way buttons are displayed in the bar. For example, if you set the translucent property to YES, any buttons in the bar are also made partially opaque.
32 |
33 | ///Customize navigation menu bar
34 |
35 | UIImage* navigationBar = [UIImage imageNamed:@"blue-menu-bar.png"];
36 | [[UINavigationBar appearance] setBackgroundImage:navigationBar forBarMetrics:UIBarMetricsDefault];
37 |
38 |
39 |
40 | ///A bar button item is a button specialized for placement on a UIToolbar or UINavigationBar object. It inherits basic button behavior from its abstract superclass, UIBarItem. The UIBarButtonItem defines additional initialization methods and properties for use on toolbars and navigation bars.
41 |
42 | ///Customize back button
43 |
44 | UIImage *backButton = [[UIImage imageNamed:@"blue-back-button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 14, 0, 4)];
45 | [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
46 |
47 | ///Customize bar button
48 |
49 | UIImage *barButton = [[UIImage imageNamed:@"blue-bar-button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(-1, 5, -1, 5)];
50 | [[UIBarButtonItem appearance] setBackgroundImage:barButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
51 |
52 | ///Following method customize the uinavigation bar title. make changes here if you want to change to another style.
53 |
54 | [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
55 | [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
56 | [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],UITextAttributeTextShadowColor,
57 | [NSValue valueWithUIOffset:UIOffsetMake(0, 3)],UITextAttributeTextShadowOffset,
58 | [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:20.0], UITextAttributeFont, nil]];
59 |
60 |
61 | }
62 |
63 |
64 | - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
65 | {
66 |
67 | }
68 |
69 |
70 | - (void)applicationWillResignActive:(UIApplication *)application
71 | {
72 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
73 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
74 | }
75 |
76 | - (void)applicationDidEnterBackground:(UIApplication *)application
77 | {
78 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
79 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
80 | }
81 |
82 |
83 |
84 | - (void)applicationWillEnterForeground:(UIApplication *)application
85 | {
86 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
87 | }
88 |
89 | - (void)applicationDidBecomeActive:(UIApplication *)application
90 | {
91 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
92 | }
93 |
94 | - (void)applicationWillTerminate:(UIApplication *)application
95 | {
96 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
97 | }
98 |
99 | @end
100 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/DALinedTextView/DALinedTextView.m:
--------------------------------------------------------------------------------
1 | //
2 | // DALinedTextView.m
3 | // DALinedTextView
4 | //
5 | // Created by Daniel Amitay on 5/12/13.
6 | // Copyright (c) 2013 Daniel Amitay. All rights reserved.
7 | //
8 |
9 | #import "DALinedTextView.h"
10 |
11 | #define DEFAULT_HORIZONTAL_COLOR [UIColor colorWithRed:0.722f green:0.910f blue:0.980f alpha:0.7f]
12 | #define DEFAULT_VERTICAL_COLOR [UIColor colorWithRed:0.957f green:0.416f blue:0.365f alpha:0.7f]
13 | #define DEFAULT_MARGINS UIEdgeInsetsMake(10.0f, 10.0f, 0.0f, 10.0f)
14 |
15 | @interface DALinedTextView ()
16 |
17 | @property (nonatomic, assign) UIView *webDocumentView;
18 |
19 | @end
20 |
21 | @implementation DALinedTextView
22 |
23 | + (void)initialize
24 | {
25 | if (self == [DALinedTextView class])
26 | {
27 | id appearance = [self appearance];
28 | [appearance setContentMode:UIViewContentModeRedraw];
29 | [appearance setHorizontalLineColor:DEFAULT_HORIZONTAL_COLOR];
30 | [appearance setVerticalLineColor:DEFAULT_VERTICAL_COLOR];
31 | [appearance setMargins:DEFAULT_MARGINS];
32 | }
33 | }
34 |
35 | #pragma mark - Superclass overrides
36 |
37 | - (id)initWithFrame:(CGRect)frame
38 | {
39 | self = [super initWithFrame:frame];
40 | if (self)
41 | {
42 | // Recycling the font is necessary
43 | // For proper line/text alignment
44 | UIFont *font = self.font;
45 | self.font = nil;
46 | self.font = font;
47 |
48 | // We need to grab the underlying webView
49 | // And resize it along with the margins
50 | self.webDocumentView = [self.subviews objectAtIndex:0];
51 | self.margins = [self.class.appearance margins];
52 | }
53 | return self;
54 | }
55 |
56 | - (void)setContentSize:(CGSize)contentSize
57 | {
58 | contentSize = (CGSize) {
59 | .width = contentSize.width - self.margins.left - self.margins.right,
60 | .height = MAX(contentSize.height, self.bounds.size.height - self.margins.top)
61 | };
62 | self.webDocumentView.frame = (CGRect) {
63 | .origin = self.webDocumentView.frame.origin,
64 | .size = contentSize
65 | };
66 | [super setContentSize:contentSize];
67 | }
68 |
69 | - (void)drawRect:(CGRect)rect
70 | {
71 | CGContextRef context = UIGraphicsGetCurrentContext();
72 | CGContextSetLineWidth(context, 1.0f);
73 |
74 | if (self.horizontalLineColor)
75 | {
76 | CGContextBeginPath(context);
77 | CGContextSetStrokeColorWithColor(context, self.horizontalLineColor.CGColor);
78 |
79 | // Create un-mutated floats outside of the for loop.
80 | // Reduces memory access.
81 | CGFloat baseOffset = 7.0f + self.font.descender;
82 | CGFloat screenScale = [UIScreen mainScreen].scale;
83 | CGFloat boundsX = self.bounds.origin.x;
84 | CGFloat boundsWidth = self.bounds.size.width;
85 |
86 | // Only draw lines that are visible on the screen.
87 | // (As opposed to throughout the entire view's contents)
88 | NSInteger firstVisibleLine = MAX(1, (self.contentOffset.y / self.font.lineHeight));
89 | NSInteger lastVisibleLine = ceilf((self.contentOffset.y + self.bounds.size.height) / self.font.lineHeight);
90 | for (NSInteger line = firstVisibleLine; line <= lastVisibleLine; ++line)
91 | {
92 | CGFloat linePointY = (baseOffset + (self.font.lineHeight * line));
93 | // Rounding the point to the nearest pixel.
94 | // Greatly reduces drawing time.
95 | CGFloat roundedLinePointY = roundf(linePointY * screenScale) / screenScale;
96 | CGContextMoveToPoint(context, boundsX, roundedLinePointY);
97 | CGContextAddLineToPoint(context, boundsWidth, roundedLinePointY);
98 | }
99 | CGContextClosePath(context);
100 | CGContextStrokePath(context);
101 | }
102 |
103 | if (self.verticalLineColor)
104 | {
105 | CGContextBeginPath(context);
106 | CGContextSetStrokeColorWithColor(context, self.verticalLineColor.CGColor);
107 | CGContextMoveToPoint(context, -1.0f, self.contentOffset.y);
108 | CGContextAddLineToPoint(context, -1.0f, self.contentOffset.y + self.bounds.size.height);
109 | CGContextClosePath(context);
110 | CGContextStrokePath(context);
111 | }
112 | }
113 |
114 | - (void)setFont:(UIFont *)font
115 | {
116 | [super setFont:font];
117 | [self setNeedsDisplay];
118 | }
119 |
120 | #pragma mark - Property methods
121 |
122 | - (void)setHorizontalLineColor:(UIColor *)horizontalLineColor
123 | {
124 | _horizontalLineColor = horizontalLineColor;
125 | [self setNeedsDisplay];
126 | }
127 |
128 | - (void)setVerticalLineColor:(UIColor *)verticalLineColor
129 | {
130 | _verticalLineColor = verticalLineColor;
131 | [self setNeedsDisplay];
132 | }
133 |
134 | - (void)setMargins:(UIEdgeInsets)margins
135 | {
136 | _margins = margins;
137 | self.contentInset = (UIEdgeInsets) {
138 | .top = self.margins.top,
139 | .left = self.margins.left,
140 | .bottom = self.margins.bottom,
141 | .right = self.margins.right - self.margins.left
142 | };
143 | [self setContentSize:self.contentSize];
144 | }
145 |
146 | @end
147 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/AddItemViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // Checklist
4 | //
5 | // Created by Partho Biswas on 8/7/13.
6 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import "AddItemViewController.h"
10 | #import "ChecklistItem.h"
11 |
12 | @interface AddItemViewController ()
13 |
14 | @end
15 |
16 | @implementation AddItemViewController {
17 | NSString *text;
18 | NSString *notes;
19 | NSString *priority;
20 | NSString *priorityToDisplay;
21 | BOOL shouldRemind;
22 | NSDate *dueDate;
23 | }
24 |
25 |
26 | ///synthesize properties
27 |
28 | @synthesize textField, notesField, doneBarButton;
29 | @synthesize delegate;
30 | @synthesize itemToEdit;
31 | @synthesize switchControl;
32 | @synthesize dueDateLabel, priorityLabel, priorityLabelToDisplay;
33 |
34 |
35 |
36 | ///we display current date and time when we present the additemvewcontroller to user
37 | - (id)initWithCoder:(NSCoder *)aDecoder
38 | {
39 | if ((self = [super initWithCoder:aDecoder])) {
40 | text = @"";
41 | shouldRemind = NO;
42 | dueDate = [NSDate date];
43 | }
44 | return self;
45 | }
46 |
47 |
48 | /// NSdate formetter to fprmat date and update the label when user picked different date
49 | - (void)updateDueDateLabel
50 | {
51 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
52 | [formatter setDateStyle:NSDateFormatterFullStyle];
53 | [formatter setTimeStyle:NSDateFormatterShortStyle];
54 | self.dueDateLabel.text = [formatter stringFromDate:dueDate];
55 | }
56 |
57 |
58 |
59 | ///we enable done bar button only when text field length is more than one character.
60 | - (void)updateDoneBarButton
61 | {
62 | self.doneBarButton.enabled = ([text length] > 0);
63 | }
64 |
65 |
66 | - (void)viewDidLoad
67 | {
68 | [super viewDidLoad];
69 |
70 |
71 | /// custom background view with our own image
72 |
73 | self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"blue-background.jpg"]];
74 |
75 |
76 |
77 | ///we check whether it is editing mode or adding mode, then set the title and fields appropriately.
78 |
79 | if (self.itemToEdit != nil) {
80 | self.title = @"Edit Item";
81 |
82 | } else
83 |
84 | self.title = @"Add Item";
85 | self.textField.text = text;
86 | self.notesField.text = notes;
87 | self.priorityLabel.text = priority;
88 | self.priorityLabelToDisplay.text = priorityToDisplay;
89 | self.switchControl.on = shouldRemind;
90 | [self updateDoneBarButton];
91 | [self updateDueDateLabel];
92 |
93 | }
94 |
95 |
96 |
97 | - (void)viewWillAppear:(BOOL)animated
98 | {
99 | [super viewWillAppear:animated];
100 |
101 | if (self.title != NSLocalizedString(@"Edit Item", nil)) {
102 | [self.textField becomeFirstResponder];
103 | self.priorityLabelToDisplay.text = @"None";
104 | self.priorityLabel.text = @"";
105 |
106 | }else
107 | [self.textField resignFirstResponder];
108 | }
109 |
110 |
111 |
112 |
113 |
114 | /// method to call addItemViewControllerDidCancel method when cancel button pressed
115 |
116 | - (IBAction)cancel
117 | {
118 | [self.delegate addItemViewControllerDidCancel:self];
119 | }
120 |
121 |
122 | /// method to call didFinishAddingItem method when Done button pressed
123 |
124 |
125 | - (IBAction)done
126 | {
127 | if (self.itemToEdit == nil) {
128 | ChecklistItem *item = [[ChecklistItem alloc] init];
129 | item.text = self.textField.text;
130 | item.notes = self.notesField.text;
131 | item.checked = NO;
132 | item.priority = self.priorityLabel.text;
133 | item.priorityToDisplay = self.priorityLabelToDisplay.text;
134 | item.checked = NO;
135 | item.shouldRemind = self.switchControl.on;
136 | item.dueDate = dueDate;
137 | [item scheduleNotification];
138 | [self.delegate addItemViewController:self didFinishAddingItem:item];
139 | } else {
140 | self.itemToEdit.text = self.textField.text;
141 | self.itemToEdit.notes = self.notesField.text;
142 | self.itemToEdit.priority = self.priorityLabel.text;
143 | self.itemToEdit.priorityToDisplay = self.priorityLabelToDisplay.text;
144 | self.itemToEdit.shouldRemind = self.switchControl.on;
145 | self.itemToEdit.dueDate = dueDate;
146 | [self.itemToEdit scheduleNotification];
147 | [self.delegate addItemViewController:self didFinishEditingItem:self.itemToEdit];
148 | }
149 | }
150 |
151 |
152 |
153 | ///we take not when the user tap on the UISwitch and we create local notification only if it is turned on
154 | - (IBAction)switchChanged:(UISwitch *)sender
155 | {
156 | shouldRemind = sender.on;
157 |
158 |
159 | }
160 |
161 |
162 |
163 | ///optionally we can dismiss keyboard if the user starts to scroll the tableview
164 |
165 | - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
166 | {
167 | [self.textField resignFirstResponder];
168 | [self.notesField resignFirstResponder];
169 |
170 | }
171 |
172 |
173 |
174 |
175 | ///to prevent the uitableview cell turns blue when user taps on it
176 |
177 | - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
178 | {
179 | if (indexPath.row == 1) {
180 | return indexPath;
181 | } else {
182 | return nil;
183 | }
184 | }
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 | - (void)didReceiveMemoryWarning
193 | {
194 | [super didReceiveMemoryWarning];
195 |
196 | // Dispose of any resources that can be recreated.
197 | }
198 |
199 | ///release te memory by setting nil to these fields as we no loner need them
200 |
201 | - (void)viewDidUnload
202 | {
203 | [self setTextField:nil];
204 | [self setNotesField:nil];
205 | [self setDoneBarButton:nil];
206 | [self setSwitchControl:nil];
207 | [self setDueDateLabel:nil];
208 | [self setPriorityLabel:nil];
209 | [self setPriorityLabelToDisplay:nil];
210 | [super viewDidUnload];
211 | }
212 |
213 |
214 | ///we present stored item if the user editing an item
215 |
216 | - (void)setItemToEdit:(ChecklistItem *)newItem
217 | {
218 | if (itemToEdit != newItem) {
219 | itemToEdit = newItem;
220 | text = itemToEdit.text;
221 | notes = itemToEdit.notes;
222 | priority = itemToEdit.priority;
223 | priorityToDisplay = itemToEdit.priorityToDisplay;
224 | shouldRemind = itemToEdit.shouldRemind;
225 | dueDate = itemToEdit.dueDate;
226 | }
227 | }
228 |
229 |
230 |
231 |
232 |
233 | /// method to check whether the text field has any text in it. if user type a text then it enables the Done bar button. otherwise it will disable the done bar button. therefore the user not able to press the button. this ensures that empty text are not delegated to checklistviewcontroller
234 |
235 | #pragma mark - Table view data source
236 |
237 | - (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
238 | {
239 | NSString *newText = [theTextField.text stringByReplacingCharactersInRange:range withString:string];
240 | self.doneBarButton.enabled = ([newText length] > 0);
241 | return YES;
242 | }
243 |
244 | - (BOOL)notesField:(UITextView *)theNotesField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
245 | {
246 | NSString *newText = [theNotesField.text stringByReplacingCharactersInRange:range withString:string];
247 | self.doneBarButton.enabled = ([newText length] > 0);
248 | return YES;
249 | }
250 |
251 |
252 |
253 | ///we use prepare for segue method to display date picker controller
254 |
255 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
256 | {
257 | if ([segue.identifier isEqualToString:@"PickDate"]) {
258 | DatePickerViewController *controller = segue.destinationViewController;
259 | controller.delegate = self;
260 | controller.date = dueDate;
261 | }
262 | }
263 |
264 |
265 |
266 | ///we use delegate method from date view controller. We don't store any new info if the user press cancel button
267 | - (void)datePickerDidCancel:(DatePickerViewController *)picker
268 | {
269 | [self dismissViewControllerAnimated:YES completion:nil];
270 | }
271 |
272 |
273 | ///we use delegate method from date view controller. We store the new date when the user press done button
274 |
275 | - (void)datePicker:(DatePickerViewController *)picker didPickDate:(NSDate *)date
276 | {
277 | dueDate = date;
278 | [self updateDueDateLabel];
279 | [self dismissViewControllerAnimated:YES completion:nil];
280 | }
281 |
282 |
283 |
284 | ///configure what to display in picker action sheet when the user tap on priority label
285 |
286 | - (IBAction)priority:(id)sender
287 | {
288 |
289 | self.pickerActionSheet = [[UIPickerActionSheet alloc] initForView:self.view];
290 | self.pickerActionSheet.delegate = self;
291 |
292 | NSArray *items = @[@"None", @"Low", @"Medium", @"High"];
293 | [self.pickerActionSheet show:items];
294 |
295 |
296 |
297 | }
298 |
299 |
300 |
301 | ///we don't make any changes if the user didn't select pick any priority
302 |
303 | - (void)pickerActionSheetDidCancel:(UIPickerActionSheet*)aPickerActionSheet
304 | {
305 | // User cancelled
306 | }
307 |
308 |
309 |
310 | ///we update the priority labels according user to user selection in picker list
311 |
312 | - (void)pickerActionSheet:(UIPickerActionSheet*)aPickerActionSheet didSelectItem:(id)aItem
313 | {
314 |
315 | NSString *string = (NSString*)aItem;
316 |
317 | if ([string isEqualToString:@"None"]) {
318 |
319 | self.priorityLabelToDisplay.text = @"None";
320 |
321 | self.priorityLabel.text = @"";
322 |
323 | } if ([string isEqualToString:@"Low"]) {
324 |
325 | self.priorityLabelToDisplay.text = @"Low";
326 |
327 | self.priorityLabel.text = @"!";
328 |
329 | } if ([string isEqualToString:@"Medium"]) {
330 |
331 | self.priorityLabelToDisplay.text = @"Medium";
332 |
333 | self.priorityLabel.text = @"!!";
334 |
335 | } if ([string isEqualToString:@"High"]) {
336 |
337 | self.priorityLabelToDisplay.text = @"High";
338 |
339 | self.priorityLabel.text = @"!!!";
340 |
341 | }
342 |
343 | }
344 |
345 |
346 |
347 |
348 | @end
349 |
--------------------------------------------------------------------------------
/Task Ticker/Classes/ChecklistViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // Checklist
4 | //
5 | // Created by Partho Biswas on 8/7/13.
6 | // Copyright (c) 2013 Partho Biswas. All rights reserved.
7 | //
8 |
9 | #import "ChecklistViewController.h"
10 |
11 | @interface ChecklistViewController ()
12 |
13 | @end
14 |
15 | #import "ChecklistItem.h"
16 |
17 |
18 | @implementation ChecklistViewController {
19 |
20 | NSMutableArray *items;
21 |
22 |
23 | }
24 |
25 | ///synthesize the table view so that we can assign the banner view later where to show
26 |
27 | @synthesize TableView;
28 |
29 |
30 | ///synthesize the activitycontroller
31 | @synthesize activityViewController;
32 |
33 | ///synthesize ilteredtabledata, searchbar and filterstatus
34 | @synthesize filteredTableData;
35 | @synthesize searchBar;
36 | @synthesize isFiltered;
37 |
38 |
39 | - (void)viewDidLoad
40 | {
41 | [super viewDidLoad];
42 |
43 | ///title of view controller
44 |
45 | self.title = @"Checklist";
46 |
47 | ///table view background with our own custom image
48 |
49 | self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"blue-background.jpg"]];
50 |
51 | ///initialize pull to refresh control
52 |
53 | [self.refreshControl
54 | addTarget:self
55 | action:@selector(refresh)
56 | forControlEvents:UIControlEventValueChanged
57 | ];
58 |
59 | /// initialize banner view for iAd
60 |
61 | // bannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
62 | // [bannerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
63 | // bannerView.delegate = self;
64 |
65 |
66 | /// configure left navigation bar button item as edit button. This edit button has a mechanism of changing its title to "Done" when it pressed
67 |
68 | self.navigationItem.leftBarButtonItem = self.editButtonItem;
69 |
70 |
71 |
72 | ///create add and share buttons to be right bar button of navigation controllers
73 |
74 | UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
75 | initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
76 | target:self
77 | action:@selector(refresh)];
78 |
79 | UIBarButtonItem *shareButton = [[UIBarButtonItem alloc]
80 | initWithBarButtonSystemItem:UIBarButtonSystemItemAction
81 | target:self
82 | action:@selector(shareButtonClicked:)];
83 |
84 |
85 | self.navigationItem.rightBarButtonItems =
86 | [NSArray arrayWithObjects:addButton, shareButton, nil];
87 |
88 | }
89 |
90 |
91 |
92 |
93 |
94 | ///Creates a list of path strings for the specified directories in the specified domains. The list is in the order in which you should search the directories. If expandTilde is YES, tildes are expanded as described in stringByExpandingTildeInPath.
95 | ///we define the plist shall be saved in our own directory
96 |
97 | - (NSString *)documentsDirectory
98 | {
99 | NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
100 | NSString *documentsDirectory = [paths objectAtIndex:0];
101 | return documentsDirectory;
102 | }
103 |
104 | ///Returns a new string made by appending to the receiver a given string. Note that this method only works with file paths (not, for example, string representations of URLs).
105 | ///we save the plist in the documents director of our application
106 |
107 | - (NSString *)dataFilePath
108 | {
109 | return [[self documentsDirectory] stringByAppendingPathComponent:@"Checklists.plist"];
110 | }
111 |
112 |
113 |
114 | ///Method to save the data to plist
115 |
116 | - (void)saveChecklistItems
117 | {
118 | NSMutableData *data = [[NSMutableData alloc] init];
119 | NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
120 | [archiver encodeObject:items forKey:@"ChecklistItems"];
121 | [archiver finishEncoding];
122 | [data writeToFile:[self dataFilePath] atomically:YES];
123 | }
124 |
125 |
126 | ///decode the plist
127 | - (id)initWithCoder:(NSCoder *)aDecoder
128 | {
129 | if ((self = [super initWithCoder:aDecoder])) {
130 | [self loadChecklistItems];
131 | }
132 | return self;
133 | }
134 |
135 |
136 |
137 | ///we load decoded data to tableview
138 | - (void)loadChecklistItems
139 | {
140 | NSString *path = [self dataFilePath];
141 | if ([[NSFileManager defaultManager] fileExistsAtPath:path])
142 | {
143 | NSData *data = [[NSData alloc] initWithContentsOfFile:path];
144 | NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
145 | items = [unarchiver decodeObjectForKey:@"ChecklistItems"];
146 | [unarchiver finishDecoding];
147 | }
148 | else
149 | {
150 | items = [[NSMutableArray alloc] initWithCapacity:20];
151 | }
152 | }
153 |
154 |
155 |
156 |
157 |
158 | ///Tells the data source to return the number of rows in a given section of a table view. (required)
159 | /// Number of rows in tableview. we leave it to count it itself and we don't limit it.
160 | ///we check the filter status and then count the rows accordingly
161 |
162 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:( NSInteger)section
163 | {
164 |
165 | int rowCount;
166 | if(self.isFiltered)
167 | rowCount = filteredTableData.count;
168 | else
169 | rowCount = items.count;
170 |
171 | return rowCount;
172 | // return [items count];
173 | }
174 |
175 |
176 | ///Asks the data source for a cell to insert in a particular location of the table view. (required)
177 | /// here we configure uitableview cell. this will be reused for te whole tableview
178 | ///we supply tableview cell for search table as well
179 |
180 |
181 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
182 | {
183 | static NSString *CellIdentifier = @"ChecklistItem";
184 |
185 | UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
186 |
187 |
188 | if (cell == nil)
189 |
190 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
191 |
192 | ChecklistItem* item;
193 |
194 | if(isFiltered)
195 | item = [filteredTableData objectAtIndex:indexPath.row];
196 | else
197 | item = [items objectAtIndex:indexPath.row];
198 |
199 |
200 | // ChecklistItem *item = [items objectAtIndex:indexPath.row];
201 |
202 | [self configureTextForCell:cell withChecklistItem:item];
203 | [self configureCheckmarkForCell:cell withChecklistItem:item];
204 |
205 | return cell;
206 |
207 | }
208 |
209 | ///We use NSPrediction method to search. this will search in both Text and Notes
210 |
211 | -(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text
212 | {
213 | if(text.length == 0)
214 | {
215 | isFiltered = FALSE;
216 | [self.tableView reloadData];
217 |
218 | }
219 | else
220 | {
221 | isFiltered = true;
222 | filteredTableData = [[NSMutableArray alloc] init];
223 |
224 | for (ChecklistItem* item in items)
225 | {
226 | NSRange nameRange = [item.text rangeOfString:text options:NSCaseInsensitiveSearch];
227 | NSRange descriptionRange = [item.notes rangeOfString:text options:NSCaseInsensitiveSearch];
228 | if(nameRange.location != NSNotFound || descriptionRange.location != NSNotFound)
229 | {
230 | [filteredTableData addObject:item];
231 |
232 | }
233 | }
234 | }
235 |
236 | [self.tableView reloadData];
237 |
238 |
239 | }
240 |
241 |
242 |
243 | ///to dismiss keyboard
244 | - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
245 | {
246 | [self resignFirstResponder];
247 | }
248 |
249 |
250 |
251 |
252 | ///we don't show the cancel button of search bar
253 | - (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
254 | {
255 | controller.searchBar.showsCancelButton = NO;
256 | }
257 |
258 |
259 |
260 |
261 | ///Tells the delegate that the user tapped the accessory (disclosure) view associated with a given row.
262 | /// we declare the touch event of accessory button of uitableview cell. When user tap on the accessory button, it should bring editing mode
263 |
264 | - (IBAction)accessoryButtonTapped:(id)sender event:(id)event
265 | {
266 | NSSet *touches = [event allTouches];
267 | UITouch *touch = [touches anyObject];
268 | CGPoint currentTouchPosition = [touch locationInView:self.tableView];
269 | NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
270 | if (indexPath != nil)
271 |
272 | {
273 | [self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
274 | }
275 | }
276 |
277 |
278 | /// following method configures uitableviewcell when user taps on it. It also toggles when tap again
279 |
280 | - (void)configureCheckmarkForCell:(UITableViewCell *)cell withChecklistItem:(ChecklistItem *)item
281 | {
282 |
283 |
284 | {
285 | if (item.checked) {
286 |
287 | UIButton *checkBox = (UIButton *)[cell viewWithTag:1503];
288 | checkBox.hidden=FALSE;
289 |
290 |
291 |
292 | UILabel *label = (UILabel *)[cell viewWithTag:1000];
293 | label.alpha = 0.4;
294 |
295 | UILabel *notesLabel = (UILabel *)[cell viewWithTag:1500];
296 | notesLabel.alpha = 0.2;
297 |
298 | UIButton *accesoorybutton = (UIButton *)[cell viewWithTag:1005];
299 | accesoorybutton.hidden=TRUE;
300 |
301 |
302 | UILabel *dueDateLabel = (UILabel *)[cell viewWithTag:1600];
303 | dueDateLabel.alpha = 0.4;
304 |
305 | UILabel *priorityLabel = (UILabel *)[cell viewWithTag:1200];
306 | priorityLabel.alpha = 0.4;
307 |
308 |
309 |
310 |
311 | } else {
312 |
313 |
314 | UIButton *checkBox = (UIButton *)[cell viewWithTag:1503];
315 | checkBox.hidden=TRUE;
316 |
317 |
318 | UILabel *label = (UILabel *)[cell viewWithTag:1000];
319 | label.alpha = 1.0;
320 |
321 |
322 | UILabel *notesLabel = (UILabel *)[cell viewWithTag:1500];
323 | notesLabel.alpha = 1.0;
324 |
325 | UIButton *accesoorybutton = (UIButton *)[cell viewWithTag:1005];
326 | accesoorybutton.hidden=FALSE;
327 |
328 | UILabel *dueDateLabel = (UILabel *)[cell viewWithTag:1600];
329 | dueDateLabel.alpha = 1.0;
330 |
331 | UILabel *priorityLabel = (UILabel *)[cell viewWithTag:1200];
332 | priorityLabel.alpha = 1.0;
333 |
334 | }
335 |
336 | }
337 |
338 |
339 | UILabel *notesLabel = (UILabel *)[cell viewWithTag:1500];
340 | notesLabel.text = item.notes;
341 |
342 |
343 | if (notesLabel.text == nil) {
344 |
345 |
346 |
347 |
348 | }
349 | }
350 |
351 |
352 |
353 | ///Set background of uitable view cell with our own custom image. we also set the seperator style between cell to none
354 |
355 | - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
356 |
357 | cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"list-item-bg.png"]];
358 |
359 | [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
360 |
361 | }
362 |
363 | ///The method allows the delegate to specify rows with varying heights. If this method is implemented, the value it returns overrides the value specified for the rowHeight property of UITableView for the given row.
364 | /// height of uitable view cell which overrides interface builder
365 |
366 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
367 | {
368 | return 53;
369 | }
370 |
371 |
372 |
373 | /// following method configures uitableviewcell text when user adds a new item
374 |
375 | - (void)configureTextForCell:(UITableViewCell *)cell withChecklistItem:(ChecklistItem *)item
376 | {
377 |
378 | UILabel *label = (UILabel *)[cell viewWithTag:1000];
379 | label.text = item.text;
380 |
381 | UILabel *labelwithoutnotes = (UILabel *)[cell viewWithTag:999];
382 | labelwithoutnotes.text = item.text;
383 |
384 | UILabel *notesLabel = (UILabel *)[cell viewWithTag:1500];
385 | notesLabel.text = item.notes;
386 |
387 |
388 | UILabel *priorityLabel = (UILabel *)[cell viewWithTag:1200];
389 | priorityLabel.text = item.priority;
390 |
391 |
392 | if (item.shouldRemind == YES) {
393 |
394 | UILabel *dueDateLabel = (UILabel *)[cell viewWithTag:1600];
395 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
396 | [formatter setDateStyle:NSDateFormatterShortStyle];
397 | [formatter setTimeStyle:NSDateFormatterShortStyle];
398 | dueDateLabel.text = [formatter stringFromDate:item.dueDate];
399 |
400 | } else
401 | {
402 | UILabel *dueDateLabel = (UILabel *)[cell viewWithTag:1600];
403 | dueDateLabel.text = nil;
404 |
405 | }
406 |
407 | }
408 |
409 | ///The delegate handles selections in this method. One of the things it can do is exclusively assign the check-mark image (UITableViewCellAccessoryCheckmark) to one row in a section (radio-list style). This method isn’t called when the editing property of the table is set to YES (that is, the table view is in editing mode)
410 | ///when the user tap on the particular cell, we treat it as the item is completed and we call cofigurecheckmarkforcell method to display checkmark and update plist.
411 |
412 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
413 | {
414 | UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
415 |
416 | ChecklistItem* item;
417 |
418 | if(isFiltered)
419 | {
420 | item = [filteredTableData objectAtIndex:indexPath.row];
421 | }
422 | else
423 | {
424 | item = [items objectAtIndex:indexPath.row];
425 | }
426 |
427 | // ChecklistItem *item = [items objectAtIndex:indexPath.row];
428 | [item toggleChecked];
429 | [self configureCheckmarkForCell:cell withChecklistItem:item];
430 | [self saveChecklistItems];
431 |
432 | }
433 |
434 | ///A swipe motion across a cell does not cause the display of a Delete button unless the table view's data source implements the tableView:commitEditingStyle:forRowAtIndexPath: method.
435 | ///When users tap the insertion (green plus) control or Delete button associated with a UITableViewCell object in the table view, the table view sends this message to the data source, asking it to commit the change. (If the user taps the deletion (red minus) control, the table view then displays the Delete button to get confirmation.) The data source commits the insertion or deletion by invoking the UITableView methods insertRowsAtIndexPaths:withRowAnimation: or deleteRowsAtIndexPaths:withRowAnimation:, as appropriate.
436 |
437 | ///when user swip left to right or right to left, table view enters into editing mode and prepares to delete the data from table view. once user deleted, we remove that particular item from plist.
438 |
439 | - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
440 | {
441 | [items removeObjectAtIndex:indexPath.row];
442 | [self saveChecklistItems];
443 | NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
444 | [tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
445 | }
446 |
447 |
448 |
449 |
450 | ///The presenting view controller is responsible for dismissing the view controller it presented. If you call this method on the presented view controller itself, it automatically forwards the message to the presenting view controller.
451 | ///dismiss view controller presented
452 |
453 | - (void)addItemViewControllerDidCancel:(AddItemViewController *)controller
454 | {
455 | [self dismissViewControllerAnimated:YES completion:nil];
456 | }
457 |
458 |
459 | ///Save the added item and dismiss view controller presented
460 |
461 | - (void)addItemViewController:(AddItemViewController *)controller didFinishAddingItem:(ChecklistItem *)item
462 | {
463 | int newRowIndex = [items count];
464 | [items addObject:item];
465 | NSIndexPath *indexPath = [NSIndexPath indexPathForRow:newRowIndex inSection:0];
466 | NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
467 | [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
468 | [self saveChecklistItems];
469 | [self dismissViewControllerAnimated:YES completion:nil];}
470 |
471 |
472 |
473 | /// A UIStoryboardSegue object is responsible for performing the visual transition between two view controllers. In addition, segue objects are used to prepare for the transition from one view controller to another. Segue objects contain information about the view controllers involved in a transition. When a segue is triggered, but before the visual transition occurs, the storyboard runtime calls the current view controller’s prepareForSegue:sender: method so that it can pass any needed data to the view controller that is about to be displayed. The UIStoryboardSegue class supports the standard visual transitions available in UIKit. You can also subclass to define custom transitions between the view controllers in your storyboard file. You do not create segue objects directly. Instead, the storyboard runtime creates them when it must perform a segue between two view controllers. You can still initiate a segue programmatically using the performSegueWithIdentifier:sender: method of UIViewController if you want. You might do so to initiate a segue from a source that was added programmatically and therefore not available in Interface Builder.
474 |
475 | /// When the user taps on "Add" button, "additem" segue is triggered and add new item view controller is presented. wen user tap on accessory button, "edititem" is triggered and item view controller is presented in editing mode.
476 |
477 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
478 | {
479 | if ([segue.identifier isEqualToString:@"AddItem"]) {
480 | UINavigationController *navigationController = segue.destinationViewController;
481 | AddItemViewController *controller = (AddItemViewController *)navigationController.topViewController;
482 | controller.delegate = self;
483 | }else if ([segue.identifier isEqualToString:@"EditItem"]) {
484 | UINavigationController *navigationController = segue.destinationViewController;
485 | AddItemViewController *controller = (AddItemViewController *)navigationController.topViewController;
486 | controller.delegate = self;
487 | controller.itemToEdit = sender;
488 | }
489 | }
490 |
491 | ///The delegate usually responds to the tap on the disclosure button (the accessory view) by displaying a new view related to the selected row. This method is not called when an accessory view is set for the row at indexPath.
492 | ///When accessory item is tapped, edit item will be presented of the selected item
493 |
494 | - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
495 | {
496 |
497 | ChecklistItem *item = [items objectAtIndex:indexPath.row];
498 | [self performSegueWithIdentifier:@"EditItem" sender:item];
499 |
500 | }
501 |
502 |
503 |
504 | ///Save the edited item and dismiss view controller presented
505 |
506 | - (void)addItemViewController:(AddItemViewController *)controller didFinishEditingItem:(ChecklistItem *)item
507 | {
508 | int index = [items indexOfObject:item];
509 | NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
510 | UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
511 | [self configureTextForCell:cell withChecklistItem:item];
512 | [self saveChecklistItems];
513 | [self dismissViewControllerAnimated:YES completion:nil];
514 | }
515 |
516 | ///A UIRefreshControl object provides a standard control that can be used to initiate the refreshing of a table view’s contents. You link a refresh control to a table through an associated table view controller object. The table view controller handles the work of adding the control to the table’s visual appearance and managing the display of that control in response to appropriate user gestures. In addition to assigning a refresh control to a table view controller’s refreshControl property, you must configure the target and action of the control itself. The control does not initiate the refresh operation directly. Instead, it sends the UIControlEventValueChanged event when a refresh operation should occur. You must assign an action method to this event and use it to perform whatever actions are needed. The UITableViewController object that owns a refresh control is also responsible for setting that control’s frame rectangle. Thus, you do not need to manage the size or position of a refresh control directly in your view hierarchy.
517 |
518 | ///refresh (aka pulltorefresh activated additem identifier. Upon activation, we stop refreshing.
519 |
520 | - (void)refresh
521 | {
522 | [self performSegueWithIdentifier:@"AddItem" sender:self];
523 |
524 | [self.refreshControl endRefreshing];
525 |
526 | }
527 |
528 |
529 | ///Define whether reorder is allowed. Set to NO if reorder is not allowed
530 |
531 | - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
532 | {
533 | return YES;
534 | }
535 |
536 |
537 |
538 | /// Identfy which row is reordered and update the table view and save the plist file.
539 |
540 | - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
541 | {
542 | id objectToMove = [items objectAtIndex:fromIndexPath.row];
543 | [items removeObjectAtIndex:fromIndexPath.row];
544 | [items insertObject:objectToMove atIndex:toIndexPath.row];
545 | [tableView reloadData];
546 | [self saveChecklistItems];
547 | }
548 |
549 |
550 |
551 | ///whent the user tap on the share button, we prepare the list and supply to activitycontroller. activity controller is responsible when user tap on the reletive share option
552 |
553 | -(IBAction) shareButtonClicked:(id)sender
554 | {
555 | NSMutableString *emailBody = [NSMutableString stringWithCapacity:1000];
556 |
557 | for (ChecklistItem *item in self->items)
558 | {
559 | [emailBody appendString:item.text];
560 | [emailBody appendString:@"\r\n"];
561 | }
562 |
563 |
564 |
565 |
566 | self.activityViewController = [[UIActivityViewController alloc]
567 |
568 | initWithActivityItems:@[emailBody] applicationActivities:nil];
569 |
570 | [self presentViewController:self.activityViewController animated:YES completion:nil];
571 |
572 |
573 | }
574 |
575 |
576 |
577 | /*
578 |
579 |
580 | ///iAd Implementation
581 | // Comment below code to deactivate iAd in the project
582 |
583 | //=========================================================================================================
584 |
585 |
586 |
587 | /// We set iAd banner to top of table view
588 |
589 | - (void)bannerViewDidLoadAd:(ADBannerView *)banner
590 | {
591 | TableView.tableHeaderView = bannerView;
592 |
593 |
594 | }
595 |
596 |
597 | /// The iAd banner should rotate when device change orientation
598 |
599 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
600 |
601 | if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
602 | bannerView.currentContentSizeIdentifier =
603 | ADBannerContentSizeIdentifierLandscape;
604 | else
605 | bannerView.currentContentSizeIdentifier =
606 | ADBannerContentSizeIdentifierPortrait;
607 |
608 | return YES;
609 | }
610 |
611 |
612 |
613 | - (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
614 | {
615 | return YES;
616 | }
617 |
618 |
619 | - (void)bannerViewActionDidFinish:(ADBannerView *)banner
620 | {
621 |
622 | }
623 |
624 |
625 | ///In the case when iAd fails to load, we remove the empty ad banner from tableview header
626 |
627 | - (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
628 | {
629 | TableView.tableHeaderView = nil;
630 |
631 | }
632 |
633 |
634 | /// release banner view as no longer need to retain in the memory
635 |
636 | -(void)viewDidUnload
637 | {
638 | bannerView = nil;
639 |
640 |
641 | }
642 |
643 | //=========================================================================================================
644 |
645 |
646 | */
647 |
648 |
649 |
650 |
651 |
652 | @end
653 |
--------------------------------------------------------------------------------
/Task Ticker/Task Ticker.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | A62FD769178F10EC00AA113B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A62FD768178F10EC00AA113B /* Security.framework */; };
11 | A62FD76B178F10F300AA113B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A62FD76A178F10F300AA113B /* QuartzCore.framework */; };
12 | A66CF93C178A615500C582E1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A66CF93B178A615500C582E1 /* UIKit.framework */; };
13 | A66CF93E178A615500C582E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A66CF93D178A615500C582E1 /* Foundation.framework */; };
14 | A66CF940178A615500C582E1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A66CF93F178A615500C582E1 /* CoreGraphics.framework */; };
15 | A66CF946178A615500C582E1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A66CF944178A615500C582E1 /* InfoPlist.strings */; };
16 | A66CF948178A615500C582E1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A66CF947178A615500C582E1 /* main.m */; };
17 | A66CF94E178A615500C582E1 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF94D178A615500C582E1 /* Default.png */; };
18 | A66CF950178A615500C582E1 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF94F178A615500C582E1 /* Default@2x.png */; };
19 | A66CF952178A615500C582E1 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF951178A615500C582E1 /* Default-568h@2x.png */; };
20 | A66CF955178A615500C582E1 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A66CF953178A615500C582E1 /* MainStoryboard.storyboard */; };
21 | A66CF967178A648200C582E1 /* AddItemViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A66CF960178A648200C582E1 /* AddItemViewController.m */; };
22 | A66CF968178A648200C582E1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A66CF962178A648200C582E1 /* AppDelegate.m */; };
23 | A66CF969178A648200C582E1 /* ChecklistItem.m in Sources */ = {isa = PBXBuildFile; fileRef = A66CF964178A648200C582E1 /* ChecklistItem.m */; };
24 | A66CF96A178A648200C582E1 /* ChecklistViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A66CF966178A648200C582E1 /* ChecklistViewController.m */; };
25 | A66CF96C178A657C00C582E1 /* iAd.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A66CF96B178A657C00C582E1 /* iAd.framework */; };
26 | A66CF983178A6A1B00C582E1 /* blue-back-button.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF96E178A6A1B00C582E1 /* blue-back-button.png */; };
27 | A66CF984178A6A1B00C582E1 /* blue-back-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF96F178A6A1B00C582E1 /* blue-back-button@2x.png */; };
28 | A66CF985178A6A1B00C582E1 /* blue-background.jpg in Resources */ = {isa = PBXBuildFile; fileRef = A66CF970178A6A1B00C582E1 /* blue-background.jpg */; };
29 | A66CF986178A6A1B00C582E1 /* blue-background@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = A66CF971178A6A1B00C582E1 /* blue-background@2x.jpg */; };
30 | A66CF987178A6A1B00C582E1 /* blue-bar-button.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF972178A6A1B00C582E1 /* blue-bar-button.png */; };
31 | A66CF988178A6A1B00C582E1 /* blue-bar-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF973178A6A1B00C582E1 /* blue-bar-button@2x.png */; };
32 | A66CF989178A6A1B00C582E1 /* blue-menu-bar.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF974178A6A1B00C582E1 /* blue-menu-bar.png */; };
33 | A66CF98A178A6A1B00C582E1 /* blue-menu-bar@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF975178A6A1B00C582E1 /* blue-menu-bar@2x.png */; };
34 | A66CF98B178A6A1B00C582E1 /* checkbox-checked.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF976178A6A1B00C582E1 /* checkbox-checked.png */; };
35 | A66CF98C178A6A1B00C582E1 /* checkbox-checked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF977178A6A1B00C582E1 /* checkbox-checked@2x.png */; };
36 | A66CF98D178A6A1B00C582E1 /* checkbox.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF978178A6A1B00C582E1 /* checkbox.png */; };
37 | A66CF98E178A6A1B00C582E1 /* checkbox@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF979178A6A1B00C582E1 /* checkbox@2x.png */; };
38 | A66CF994178A6A1B00C582E1 /* list-item-bg.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF97F178A6A1B00C582E1 /* list-item-bg.png */; };
39 | A66CF995178A6A1B00C582E1 /* list-item-bg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF980178A6A1B00C582E1 /* list-item-bg@2x.png */; };
40 | A66CF996178A6A1B00C582E1 /* Toggle_Divider.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF981178A6A1B00C582E1 /* Toggle_Divider.png */; };
41 | A66CF997178A6A1B00C582E1 /* Toggle_Divider@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF982178A6A1B00C582E1 /* Toggle_Divider@2x.png */; };
42 | A66CF99A178A6B7E00C582E1 /* detaildisclosure-new.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF998178A6B7E00C582E1 /* detaildisclosure-new.png */; };
43 | A66CF99B178A6B7E00C582E1 /* detaildisclosure-new@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF999178A6B7E00C582E1 /* detaildisclosure-new@2x.png */; };
44 | A66CF99F178A6E7500C582E1 /* DALinedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = A66CF99E178A6E7500C582E1 /* DALinedTextView.m */; };
45 | A66CF9A1178AFFD100C582E1 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF9A0178AFFD100C582E1 /* Icon.png */; };
46 | A66CF9A3178AFFD600C582E1 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A66CF9A2178AFFD600C582E1 /* Icon@2x.png */; };
47 | A69DD75317978C8D00FDC3C9 /* No Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = A69DD75117978C8D00FDC3C9 /* No Icon.png */; };
48 | A69DD75417978C8D00FDC3C9 /* No Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A69DD75217978C8D00FDC3C9 /* No Icon@2x.png */; };
49 | A69DD75717978D9B00FDC3C9 /* DatePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A69DD75617978D9B00FDC3C9 /* DatePickerViewController.m */; };
50 | A69DD75B1797917F00FDC3C9 /* UIPickerActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = A69DD75A1797917F00FDC3C9 /* UIPickerActionSheet.m */; };
51 | A69DD75E1797C2B200FDC3C9 /* DataModel.m in Sources */ = {isa = PBXBuildFile; fileRef = A69DD75D1797C2B200FDC3C9 /* DataModel.m */; };
52 | AEA1F7EE17F65DF90046656E /* Icon-60.png in Resources */ = {isa = PBXBuildFile; fileRef = AEA1F7EC17F65DF90046656E /* Icon-60.png */; };
53 | AEA1F7EF17F65DF90046656E /* Icon-Small-40.png in Resources */ = {isa = PBXBuildFile; fileRef = AEA1F7ED17F65DF90046656E /* Icon-Small-40.png */; };
54 | /* End PBXBuildFile section */
55 |
56 | /* Begin PBXFileReference section */
57 | A62FD768178F10EC00AA113B /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
58 | A62FD76A178F10F300AA113B /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
59 | A66CF938178A615500C582E1 /* Task Ticker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Task Ticker.app"; sourceTree = BUILT_PRODUCTS_DIR; };
60 | A66CF93B178A615500C582E1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
61 | A66CF93D178A615500C582E1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
62 | A66CF93F178A615500C582E1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
63 | A66CF943178A615500C582E1 /* Task Ticker-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Task Ticker-Info.plist"; sourceTree = ""; };
64 | A66CF945178A615500C582E1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
65 | A66CF947178A615500C582E1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = main.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
66 | A66CF949178A615500C582E1 /* Task Ticker-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Task Ticker-Prefix.pch"; sourceTree = ""; };
67 | A66CF94D178A615500C582E1 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; };
68 | A66CF94F178A615500C582E1 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; };
69 | A66CF951178A615500C582E1 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; };
70 | A66CF954178A615500C582E1 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = ""; };
71 | A66CF95F178A648200C582E1 /* AddItemViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = AddItemViewController.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
72 | A66CF960178A648200C582E1 /* AddItemViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AddItemViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
73 | A66CF961178A648200C582E1 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = AppDelegate.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
74 | A66CF962178A648200C582E1 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AppDelegate.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
75 | A66CF963178A648200C582E1 /* ChecklistItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = ChecklistItem.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
76 | A66CF964178A648200C582E1 /* ChecklistItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = ChecklistItem.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
77 | A66CF965178A648200C582E1 /* ChecklistViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = ChecklistViewController.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
78 | A66CF966178A648200C582E1 /* ChecklistViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = ChecklistViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
79 | A66CF96B178A657C00C582E1 /* iAd.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = iAd.framework; path = System/Library/Frameworks/iAd.framework; sourceTree = SDKROOT; };
80 | A66CF96E178A6A1B00C582E1 /* blue-back-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blue-back-button.png"; sourceTree = ""; };
81 | A66CF96F178A6A1B00C582E1 /* blue-back-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blue-back-button@2x.png"; sourceTree = ""; };
82 | A66CF970178A6A1B00C582E1 /* blue-background.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "blue-background.jpg"; sourceTree = ""; };
83 | A66CF971178A6A1B00C582E1 /* blue-background@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "blue-background@2x.jpg"; sourceTree = ""; };
84 | A66CF972178A6A1B00C582E1 /* blue-bar-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blue-bar-button.png"; sourceTree = ""; };
85 | A66CF973178A6A1B00C582E1 /* blue-bar-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blue-bar-button@2x.png"; sourceTree = ""; };
86 | A66CF974178A6A1B00C582E1 /* blue-menu-bar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blue-menu-bar.png"; sourceTree = ""; };
87 | A66CF975178A6A1B00C582E1 /* blue-menu-bar@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blue-menu-bar@2x.png"; sourceTree = ""; };
88 | A66CF976178A6A1B00C582E1 /* checkbox-checked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "checkbox-checked.png"; sourceTree = ""; };
89 | A66CF977178A6A1B00C582E1 /* checkbox-checked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "checkbox-checked@2x.png"; sourceTree = ""; };
90 | A66CF978178A6A1B00C582E1 /* checkbox.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = checkbox.png; sourceTree = ""; };
91 | A66CF979178A6A1B00C582E1 /* checkbox@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "checkbox@2x.png"; sourceTree = ""; };
92 | A66CF97F178A6A1B00C582E1 /* list-item-bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "list-item-bg.png"; sourceTree = ""; };
93 | A66CF980178A6A1B00C582E1 /* list-item-bg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "list-item-bg@2x.png"; sourceTree = ""; };
94 | A66CF981178A6A1B00C582E1 /* Toggle_Divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Toggle_Divider.png; sourceTree = ""; };
95 | A66CF982178A6A1B00C582E1 /* Toggle_Divider@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Toggle_Divider@2x.png"; sourceTree = ""; };
96 | A66CF998178A6B7E00C582E1 /* detaildisclosure-new.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "detaildisclosure-new.png"; sourceTree = ""; };
97 | A66CF999178A6B7E00C582E1 /* detaildisclosure-new@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "detaildisclosure-new@2x.png"; sourceTree = ""; };
98 | A66CF99D178A6E7500C582E1 /* DALinedTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DALinedTextView.h; sourceTree = ""; };
99 | A66CF99E178A6E7500C582E1 /* DALinedTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DALinedTextView.m; sourceTree = ""; };
100 | A66CF9A0178AFFD100C582E1 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; };
101 | A66CF9A2178AFFD600C582E1 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = ""; };
102 | A69DD75117978C8D00FDC3C9 /* No Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "No Icon.png"; sourceTree = ""; };
103 | A69DD75217978C8D00FDC3C9 /* No Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "No Icon@2x.png"; sourceTree = ""; };
104 | A69DD75517978D9B00FDC3C9 /* DatePickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = DatePickerViewController.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
105 | A69DD75617978D9B00FDC3C9 /* DatePickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = DatePickerViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
106 | A69DD7591797917F00FDC3C9 /* UIPickerActionSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIPickerActionSheet.h; sourceTree = ""; };
107 | A69DD75A1797917F00FDC3C9 /* UIPickerActionSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIPickerActionSheet.m; sourceTree = ""; };
108 | A69DD75C1797C2B200FDC3C9 /* DataModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = DataModel.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
109 | A69DD75D1797C2B200FDC3C9 /* DataModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = DataModel.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
110 | AEA1F7EC17F65DF90046656E /* Icon-60.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-60.png"; sourceTree = ""; };
111 | AEA1F7ED17F65DF90046656E /* Icon-Small-40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-40.png"; sourceTree = ""; };
112 | AEB3DAEB17F5ECD000FFB4CA /* Icon-60@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-60@2x.png"; sourceTree = ""; };
113 | AEB3DAEC17F5ECF600FFB4CA /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small.png"; sourceTree = ""; };
114 | AEB3DAED17F5ED0500FFB4CA /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small@2x.png"; sourceTree = ""; };
115 | AEB3DAEE17F5ED1300FFB4CA /* Icon-Small-40@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-40@2x.png"; sourceTree = ""; };
116 | /* End PBXFileReference section */
117 |
118 | /* Begin PBXFrameworksBuildPhase section */
119 | A66CF935178A615500C582E1 /* Frameworks */ = {
120 | isa = PBXFrameworksBuildPhase;
121 | buildActionMask = 2147483647;
122 | files = (
123 | A62FD76B178F10F300AA113B /* QuartzCore.framework in Frameworks */,
124 | A62FD769178F10EC00AA113B /* Security.framework in Frameworks */,
125 | A66CF96C178A657C00C582E1 /* iAd.framework in Frameworks */,
126 | A66CF93C178A615500C582E1 /* UIKit.framework in Frameworks */,
127 | A66CF93E178A615500C582E1 /* Foundation.framework in Frameworks */,
128 | A66CF940178A615500C582E1 /* CoreGraphics.framework in Frameworks */,
129 | );
130 | runOnlyForDeploymentPostprocessing = 0;
131 | };
132 | /* End PBXFrameworksBuildPhase section */
133 |
134 | /* Begin PBXGroup section */
135 | A66CF92F178A615500C582E1 = {
136 | isa = PBXGroup;
137 | children = (
138 | AEA1F7EC17F65DF90046656E /* Icon-60.png */,
139 | AEA1F7ED17F65DF90046656E /* Icon-Small-40.png */,
140 | AEB3DAEE17F5ED1300FFB4CA /* Icon-Small-40@2x.png */,
141 | AEB3DAED17F5ED0500FFB4CA /* Icon-Small@2x.png */,
142 | AEB3DAEC17F5ECF600FFB4CA /* Icon-Small.png */,
143 | AEB3DAEB17F5ECD000FFB4CA /* Icon-60@2x.png */,
144 | A66CF9A2178AFFD600C582E1 /* Icon@2x.png */,
145 | A66CF9A0178AFFD100C582E1 /* Icon.png */,
146 | A66CF96D178A6A1B00C582E1 /* Resources */,
147 | A66CF95E178A648200C582E1 /* Classes */,
148 | A66CF941178A615500C582E1 /* Task Ticker */,
149 | A66CF93A178A615500C582E1 /* Frameworks */,
150 | A66CF939178A615500C582E1 /* Products */,
151 | );
152 | sourceTree = "";
153 | };
154 | A66CF939178A615500C582E1 /* Products */ = {
155 | isa = PBXGroup;
156 | children = (
157 | A66CF938178A615500C582E1 /* Task Ticker.app */,
158 | );
159 | name = Products;
160 | sourceTree = "";
161 | };
162 | A66CF93A178A615500C582E1 /* Frameworks */ = {
163 | isa = PBXGroup;
164 | children = (
165 | A62FD76A178F10F300AA113B /* QuartzCore.framework */,
166 | A62FD768178F10EC00AA113B /* Security.framework */,
167 | A66CF96B178A657C00C582E1 /* iAd.framework */,
168 | A66CF93B178A615500C582E1 /* UIKit.framework */,
169 | A66CF93D178A615500C582E1 /* Foundation.framework */,
170 | A66CF93F178A615500C582E1 /* CoreGraphics.framework */,
171 | );
172 | name = Frameworks;
173 | sourceTree = "";
174 | };
175 | A66CF941178A615500C582E1 /* Task Ticker */ = {
176 | isa = PBXGroup;
177 | children = (
178 | A66CF953178A615500C582E1 /* MainStoryboard.storyboard */,
179 | A66CF942178A615500C582E1 /* Supporting Files */,
180 | );
181 | name = "Task Ticker";
182 | path = Checklist;
183 | sourceTree = "";
184 | };
185 | A66CF942178A615500C582E1 /* Supporting Files */ = {
186 | isa = PBXGroup;
187 | children = (
188 | A66CF943178A615500C582E1 /* Task Ticker-Info.plist */,
189 | A66CF944178A615500C582E1 /* InfoPlist.strings */,
190 | A66CF947178A615500C582E1 /* main.m */,
191 | A66CF949178A615500C582E1 /* Task Ticker-Prefix.pch */,
192 | A66CF94D178A615500C582E1 /* Default.png */,
193 | A66CF94F178A615500C582E1 /* Default@2x.png */,
194 | A66CF951178A615500C582E1 /* Default-568h@2x.png */,
195 | );
196 | name = "Supporting Files";
197 | sourceTree = "";
198 | };
199 | A66CF95E178A648200C582E1 /* Classes */ = {
200 | isa = PBXGroup;
201 | children = (
202 | A69DD7581797917F00FDC3C9 /* UIPickerActionSheet */,
203 | A69DD75517978D9B00FDC3C9 /* DatePickerViewController.h */,
204 | A69DD75617978D9B00FDC3C9 /* DatePickerViewController.m */,
205 | A66CF99C178A6E7500C582E1 /* DALinedTextView */,
206 | A66CF961178A648200C582E1 /* AppDelegate.h */,
207 | A66CF962178A648200C582E1 /* AppDelegate.m */,
208 | A66CF965178A648200C582E1 /* ChecklistViewController.h */,
209 | A66CF966178A648200C582E1 /* ChecklistViewController.m */,
210 | A66CF95F178A648200C582E1 /* AddItemViewController.h */,
211 | A66CF960178A648200C582E1 /* AddItemViewController.m */,
212 | A66CF963178A648200C582E1 /* ChecklistItem.h */,
213 | A66CF964178A648200C582E1 /* ChecklistItem.m */,
214 | A69DD75C1797C2B200FDC3C9 /* DataModel.h */,
215 | A69DD75D1797C2B200FDC3C9 /* DataModel.m */,
216 | );
217 | path = Classes;
218 | sourceTree = "";
219 | };
220 | A66CF96D178A6A1B00C582E1 /* Resources */ = {
221 | isa = PBXGroup;
222 | children = (
223 | A69DD75117978C8D00FDC3C9 /* No Icon.png */,
224 | A69DD75217978C8D00FDC3C9 /* No Icon@2x.png */,
225 | A66CF998178A6B7E00C582E1 /* detaildisclosure-new.png */,
226 | A66CF999178A6B7E00C582E1 /* detaildisclosure-new@2x.png */,
227 | A66CF96E178A6A1B00C582E1 /* blue-back-button.png */,
228 | A66CF96F178A6A1B00C582E1 /* blue-back-button@2x.png */,
229 | A66CF970178A6A1B00C582E1 /* blue-background.jpg */,
230 | A66CF971178A6A1B00C582E1 /* blue-background@2x.jpg */,
231 | A66CF972178A6A1B00C582E1 /* blue-bar-button.png */,
232 | A66CF973178A6A1B00C582E1 /* blue-bar-button@2x.png */,
233 | A66CF974178A6A1B00C582E1 /* blue-menu-bar.png */,
234 | A66CF975178A6A1B00C582E1 /* blue-menu-bar@2x.png */,
235 | A66CF976178A6A1B00C582E1 /* checkbox-checked.png */,
236 | A66CF977178A6A1B00C582E1 /* checkbox-checked@2x.png */,
237 | A66CF978178A6A1B00C582E1 /* checkbox.png */,
238 | A66CF979178A6A1B00C582E1 /* checkbox@2x.png */,
239 | A66CF97F178A6A1B00C582E1 /* list-item-bg.png */,
240 | A66CF980178A6A1B00C582E1 /* list-item-bg@2x.png */,
241 | A66CF981178A6A1B00C582E1 /* Toggle_Divider.png */,
242 | A66CF982178A6A1B00C582E1 /* Toggle_Divider@2x.png */,
243 | );
244 | path = Resources;
245 | sourceTree = "";
246 | };
247 | A66CF99C178A6E7500C582E1 /* DALinedTextView */ = {
248 | isa = PBXGroup;
249 | children = (
250 | A66CF99D178A6E7500C582E1 /* DALinedTextView.h */,
251 | A66CF99E178A6E7500C582E1 /* DALinedTextView.m */,
252 | );
253 | path = DALinedTextView;
254 | sourceTree = "";
255 | };
256 | A69DD7581797917F00FDC3C9 /* UIPickerActionSheet */ = {
257 | isa = PBXGroup;
258 | children = (
259 | A69DD7591797917F00FDC3C9 /* UIPickerActionSheet.h */,
260 | A69DD75A1797917F00FDC3C9 /* UIPickerActionSheet.m */,
261 | );
262 | path = UIPickerActionSheet;
263 | sourceTree = "";
264 | };
265 | /* End PBXGroup section */
266 |
267 | /* Begin PBXNativeTarget section */
268 | A66CF937178A615500C582E1 /* Task Ticker */ = {
269 | isa = PBXNativeTarget;
270 | buildConfigurationList = A66CF95B178A615500C582E1 /* Build configuration list for PBXNativeTarget "Task Ticker" */;
271 | buildPhases = (
272 | A66CF934178A615500C582E1 /* Sources */,
273 | A66CF935178A615500C582E1 /* Frameworks */,
274 | A66CF936178A615500C582E1 /* Resources */,
275 | );
276 | buildRules = (
277 | );
278 | dependencies = (
279 | );
280 | name = "Task Ticker";
281 | productName = Checklist;
282 | productReference = A66CF938178A615500C582E1 /* Task Ticker.app */;
283 | productType = "com.apple.product-type.application";
284 | };
285 | /* End PBXNativeTarget section */
286 |
287 | /* Begin PBXProject section */
288 | A66CF930178A615500C582E1 /* Project object */ = {
289 | isa = PBXProject;
290 | attributes = {
291 | LastUpgradeCheck = 0460;
292 | ORGANIZATIONNAME = "Partho Biswas";
293 | TargetAttributes = {
294 | A66CF937178A615500C582E1 = {
295 | DevelopmentTeam = CL96XN5QY7;
296 | };
297 | };
298 | };
299 | buildConfigurationList = A66CF933178A615500C582E1 /* Build configuration list for PBXProject "Task Ticker" */;
300 | compatibilityVersion = "Xcode 3.2";
301 | developmentRegion = English;
302 | hasScannedForEncodings = 0;
303 | knownRegions = (
304 | en,
305 | );
306 | mainGroup = A66CF92F178A615500C582E1;
307 | productRefGroup = A66CF939178A615500C582E1 /* Products */;
308 | projectDirPath = "";
309 | projectRoot = "";
310 | targets = (
311 | A66CF937178A615500C582E1 /* Task Ticker */,
312 | );
313 | };
314 | /* End PBXProject section */
315 |
316 | /* Begin PBXResourcesBuildPhase section */
317 | A66CF936178A615500C582E1 /* Resources */ = {
318 | isa = PBXResourcesBuildPhase;
319 | buildActionMask = 2147483647;
320 | files = (
321 | A66CF946178A615500C582E1 /* InfoPlist.strings in Resources */,
322 | A66CF94E178A615500C582E1 /* Default.png in Resources */,
323 | A66CF950178A615500C582E1 /* Default@2x.png in Resources */,
324 | A66CF952178A615500C582E1 /* Default-568h@2x.png in Resources */,
325 | A66CF955178A615500C582E1 /* MainStoryboard.storyboard in Resources */,
326 | A66CF983178A6A1B00C582E1 /* blue-back-button.png in Resources */,
327 | A66CF984178A6A1B00C582E1 /* blue-back-button@2x.png in Resources */,
328 | A66CF985178A6A1B00C582E1 /* blue-background.jpg in Resources */,
329 | A66CF986178A6A1B00C582E1 /* blue-background@2x.jpg in Resources */,
330 | A66CF987178A6A1B00C582E1 /* blue-bar-button.png in Resources */,
331 | A66CF988178A6A1B00C582E1 /* blue-bar-button@2x.png in Resources */,
332 | AEA1F7EF17F65DF90046656E /* Icon-Small-40.png in Resources */,
333 | A66CF989178A6A1B00C582E1 /* blue-menu-bar.png in Resources */,
334 | A66CF98A178A6A1B00C582E1 /* blue-menu-bar@2x.png in Resources */,
335 | A66CF98B178A6A1B00C582E1 /* checkbox-checked.png in Resources */,
336 | A66CF98C178A6A1B00C582E1 /* checkbox-checked@2x.png in Resources */,
337 | A66CF98D178A6A1B00C582E1 /* checkbox.png in Resources */,
338 | A66CF98E178A6A1B00C582E1 /* checkbox@2x.png in Resources */,
339 | A66CF994178A6A1B00C582E1 /* list-item-bg.png in Resources */,
340 | A66CF995178A6A1B00C582E1 /* list-item-bg@2x.png in Resources */,
341 | A66CF996178A6A1B00C582E1 /* Toggle_Divider.png in Resources */,
342 | A66CF997178A6A1B00C582E1 /* Toggle_Divider@2x.png in Resources */,
343 | A66CF99A178A6B7E00C582E1 /* detaildisclosure-new.png in Resources */,
344 | A66CF99B178A6B7E00C582E1 /* detaildisclosure-new@2x.png in Resources */,
345 | A66CF9A1178AFFD100C582E1 /* Icon.png in Resources */,
346 | A66CF9A3178AFFD600C582E1 /* Icon@2x.png in Resources */,
347 | A69DD75317978C8D00FDC3C9 /* No Icon.png in Resources */,
348 | AEA1F7EE17F65DF90046656E /* Icon-60.png in Resources */,
349 | A69DD75417978C8D00FDC3C9 /* No Icon@2x.png in Resources */,
350 | );
351 | runOnlyForDeploymentPostprocessing = 0;
352 | };
353 | /* End PBXResourcesBuildPhase section */
354 |
355 | /* Begin PBXSourcesBuildPhase section */
356 | A66CF934178A615500C582E1 /* Sources */ = {
357 | isa = PBXSourcesBuildPhase;
358 | buildActionMask = 2147483647;
359 | files = (
360 | A66CF948178A615500C582E1 /* main.m in Sources */,
361 | A66CF967178A648200C582E1 /* AddItemViewController.m in Sources */,
362 | A66CF968178A648200C582E1 /* AppDelegate.m in Sources */,
363 | A66CF969178A648200C582E1 /* ChecklistItem.m in Sources */,
364 | A66CF96A178A648200C582E1 /* ChecklistViewController.m in Sources */,
365 | A66CF99F178A6E7500C582E1 /* DALinedTextView.m in Sources */,
366 | A69DD75717978D9B00FDC3C9 /* DatePickerViewController.m in Sources */,
367 | A69DD75B1797917F00FDC3C9 /* UIPickerActionSheet.m in Sources */,
368 | A69DD75E1797C2B200FDC3C9 /* DataModel.m in Sources */,
369 | );
370 | runOnlyForDeploymentPostprocessing = 0;
371 | };
372 | /* End PBXSourcesBuildPhase section */
373 |
374 | /* Begin PBXVariantGroup section */
375 | A66CF944178A615500C582E1 /* InfoPlist.strings */ = {
376 | isa = PBXVariantGroup;
377 | children = (
378 | A66CF945178A615500C582E1 /* en */,
379 | );
380 | name = InfoPlist.strings;
381 | sourceTree = "";
382 | };
383 | A66CF953178A615500C582E1 /* MainStoryboard.storyboard */ = {
384 | isa = PBXVariantGroup;
385 | children = (
386 | A66CF954178A615500C582E1 /* en */,
387 | );
388 | name = MainStoryboard.storyboard;
389 | sourceTree = "";
390 | };
391 | /* End PBXVariantGroup section */
392 |
393 | /* Begin XCBuildConfiguration section */
394 | A66CF959178A615500C582E1 /* Debug */ = {
395 | isa = XCBuildConfiguration;
396 | buildSettings = {
397 | ALWAYS_SEARCH_USER_PATHS = NO;
398 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
399 | CLANG_CXX_LIBRARY = "libc++";
400 | CLANG_ENABLE_OBJC_ARC = YES;
401 | CLANG_WARN_CONSTANT_CONVERSION = YES;
402 | CLANG_WARN_EMPTY_BODY = YES;
403 | CLANG_WARN_ENUM_CONVERSION = YES;
404 | CLANG_WARN_INT_CONVERSION = YES;
405 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
406 | CODE_SIGN_IDENTITY = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
407 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
408 | COPY_PHASE_STRIP = NO;
409 | GCC_C_LANGUAGE_STANDARD = gnu99;
410 | GCC_DYNAMIC_NO_PIC = NO;
411 | GCC_OPTIMIZATION_LEVEL = 0;
412 | GCC_PREPROCESSOR_DEFINITIONS = (
413 | "DEBUG=1",
414 | "$(inherited)",
415 | );
416 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
417 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
418 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
419 | GCC_WARN_UNUSED_VARIABLE = YES;
420 | IPHONEOS_DEPLOYMENT_TARGET = 6.1;
421 | ONLY_ACTIVE_ARCH = YES;
422 | PROVISIONING_PROFILE = "265D8A4D-1DD8-4DC4-82BA-C7423B2FCE24";
423 | SDKROOT = iphoneos;
424 | };
425 | name = Debug;
426 | };
427 | A66CF95A178A615500C582E1 /* Release */ = {
428 | isa = XCBuildConfiguration;
429 | buildSettings = {
430 | ALWAYS_SEARCH_USER_PATHS = NO;
431 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
432 | CLANG_CXX_LIBRARY = "libc++";
433 | CLANG_ENABLE_OBJC_ARC = YES;
434 | CLANG_WARN_CONSTANT_CONVERSION = YES;
435 | CLANG_WARN_EMPTY_BODY = YES;
436 | CLANG_WARN_ENUM_CONVERSION = YES;
437 | CLANG_WARN_INT_CONVERSION = YES;
438 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
439 | CODE_SIGN_IDENTITY = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
440 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
441 | COPY_PHASE_STRIP = YES;
442 | GCC_C_LANGUAGE_STANDARD = gnu99;
443 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
444 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
445 | GCC_WARN_UNUSED_VARIABLE = YES;
446 | IPHONEOS_DEPLOYMENT_TARGET = 6.1;
447 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
448 | PROVISIONING_PROFILE = "265D8A4D-1DD8-4DC4-82BA-C7423B2FCE24";
449 | SDKROOT = iphoneos;
450 | VALIDATE_PRODUCT = YES;
451 | };
452 | name = Release;
453 | };
454 | A66CF95C178A615500C582E1 /* Debug */ = {
455 | isa = XCBuildConfiguration;
456 | buildSettings = {
457 | CODE_SIGN_IDENTITY = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
458 | FRAMEWORK_SEARCH_PATHS = (
459 | "$(inherited)",
460 | "\"$(SRCROOT)\"",
461 | );
462 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
463 | GCC_PREFIX_HEADER = "Checklist/Task Ticker-Prefix.pch";
464 | INFOPLIST_FILE = "Checklist/Task Ticker-Info.plist";
465 | PRODUCT_NAME = "Task Ticker";
466 | PROVISIONING_PROFILE = "265D8A4D-1DD8-4DC4-82BA-C7423B2FCE24";
467 | WRAPPER_EXTENSION = app;
468 | };
469 | name = Debug;
470 | };
471 | A66CF95D178A615500C582E1 /* Release */ = {
472 | isa = XCBuildConfiguration;
473 | buildSettings = {
474 | CODE_SIGN_IDENTITY = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
475 | FRAMEWORK_SEARCH_PATHS = (
476 | "$(inherited)",
477 | "\"$(SRCROOT)\"",
478 | );
479 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
480 | GCC_PREFIX_HEADER = "Checklist/Task Ticker-Prefix.pch";
481 | INFOPLIST_FILE = "Checklist/Task Ticker-Info.plist";
482 | PRODUCT_NAME = "Task Ticker";
483 | PROVISIONING_PROFILE = "265D8A4D-1DD8-4DC4-82BA-C7423B2FCE24";
484 | VALIDATE_PRODUCT = NO;
485 | WRAPPER_EXTENSION = app;
486 | };
487 | name = Release;
488 | };
489 | AEA1F7EA17F65C4F0046656E /* App Store */ = {
490 | isa = XCBuildConfiguration;
491 | buildSettings = {
492 | ALWAYS_SEARCH_USER_PATHS = NO;
493 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
494 | CLANG_CXX_LIBRARY = "libc++";
495 | CLANG_ENABLE_OBJC_ARC = YES;
496 | CLANG_WARN_CONSTANT_CONVERSION = YES;
497 | CLANG_WARN_EMPTY_BODY = YES;
498 | CLANG_WARN_ENUM_CONVERSION = YES;
499 | CLANG_WARN_INT_CONVERSION = YES;
500 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
501 | CODE_SIGN_IDENTITY = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
502 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
503 | COPY_PHASE_STRIP = YES;
504 | GCC_C_LANGUAGE_STANDARD = gnu99;
505 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
506 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
507 | GCC_WARN_UNUSED_VARIABLE = YES;
508 | IPHONEOS_DEPLOYMENT_TARGET = 6.1;
509 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
510 | PROVISIONING_PROFILE = "265D8A4D-1DD8-4DC4-82BA-C7423B2FCE24";
511 | SDKROOT = iphoneos;
512 | VALIDATE_PRODUCT = YES;
513 | };
514 | name = "App Store";
515 | };
516 | AEA1F7EB17F65C4F0046656E /* App Store */ = {
517 | isa = XCBuildConfiguration;
518 | buildSettings = {
519 | CODE_SIGN_IDENTITY = "iPhone Distribution: Partho Biswas (CL96XN5QY7)";
520 | FRAMEWORK_SEARCH_PATHS = (
521 | "$(inherited)",
522 | "\"$(SRCROOT)\"",
523 | );
524 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
525 | GCC_PREFIX_HEADER = "Checklist/Task Ticker-Prefix.pch";
526 | INFOPLIST_FILE = "Checklist/Task Ticker-Info.plist";
527 | PRODUCT_NAME = "Task Ticker";
528 | PROVISIONING_PROFILE = "265D8A4D-1DD8-4DC4-82BA-C7423B2FCE24";
529 | WRAPPER_EXTENSION = app;
530 | };
531 | name = "App Store";
532 | };
533 | /* End XCBuildConfiguration section */
534 |
535 | /* Begin XCConfigurationList section */
536 | A66CF933178A615500C582E1 /* Build configuration list for PBXProject "Task Ticker" */ = {
537 | isa = XCConfigurationList;
538 | buildConfigurations = (
539 | A66CF959178A615500C582E1 /* Debug */,
540 | A66CF95A178A615500C582E1 /* Release */,
541 | AEA1F7EA17F65C4F0046656E /* App Store */,
542 | );
543 | defaultConfigurationIsVisible = 0;
544 | defaultConfigurationName = Release;
545 | };
546 | A66CF95B178A615500C582E1 /* Build configuration list for PBXNativeTarget "Task Ticker" */ = {
547 | isa = XCConfigurationList;
548 | buildConfigurations = (
549 | A66CF95C178A615500C582E1 /* Debug */,
550 | A66CF95D178A615500C582E1 /* Release */,
551 | AEA1F7EB17F65C4F0046656E /* App Store */,
552 | );
553 | defaultConfigurationIsVisible = 0;
554 | defaultConfigurationName = Release;
555 | };
556 | /* End XCConfigurationList section */
557 | };
558 | rootObject = A66CF930178A615500C582E1 /* Project object */;
559 | }
560 |
--------------------------------------------------------------------------------
/Task Ticker/Checklist/en.lproj/MainStoryboard.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
61 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
89 |
98 |
108 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
313 |
325 |
334 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
--------------------------------------------------------------------------------