-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEditingViewController.m
More file actions
125 lines (99 loc) · 3.87 KB
/
EditingViewController.m
File metadata and controls
125 lines (99 loc) · 3.87 KB
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//
// EditingViewController.m
// TimeClock
//
// Created by Matthew Baker on 10/9/09.
// Copyright 2009 __MyCompanyName__. All rights reserved.
//
#import "EditingViewController.h"
@implementation EditingViewController
@synthesize textField, editedObject, editedFieldKey, editedFieldName, datePicker, clientPicker, editType;
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
// Set the title to the user-visible name of the field.
self.title = editedFieldName;
// Configure the save and cancel buttons.
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save)];
self.navigationItem.rightBarButtonItem = saveButton;
[saveButton release];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)];
self.navigationItem.leftBarButtonItem = cancelButton;
[cancelButton release];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self enableControl:self.editType];
}
- (void)enableControl:(EditingViewControllerType)type {
textField.hidden = type != EditingViewControllerTypeString &&
type != EditingViewControllerTypeDouble &&
type != EditingViewControllerTypePhone;
datePicker.hidden = type != EditingViewControllerTypeDate;
clientPicker.hidden = type != EditingViewControllerTypeClient;
// Configure the user interface according to state.
if (type == EditingViewControllerTypeDate) {
NSDate *date = [editedObject valueForKey:editedFieldKey];
if (date == nil) date = [NSDate date];
datePicker.date = date;
}
else if (type == EditingViewControllerTypeDouble) {
NSNumber *number = [editedObject valueForKey:editedFieldKey];
if (number == nil) textField.text = @"";
else textField.text = [number stringValue];
textField.placeholder = self.title;
textField.keyboardType = UIKeyboardTypeNumberPad;
[textField becomeFirstResponder];
}
else if (type == EditingViewControllerTypeClient) {
}
else if (type == EditingViewControllerTypePhone) {
textField.text = [editedObject valueForKey:editedFieldKey];
textField.placeholder = self.title;
textField.keyboardType = UIKeyboardTypePhonePad;
[textField becomeFirstResponder];
}
else {
textField.text = [editedObject valueForKey:editedFieldKey];
textField.placeholder = self.title;
textField.keyboardType = UIKeyboardTypeDefault;
[textField becomeFirstResponder];
}
}
#pragma mark -
#pragma mark Save and cancel operations
- (IBAction)save {
// Set the action name for the undo operation.
NSUndoManager * undoManager = [[editedObject managedObjectContext] undoManager];
[undoManager setActionName:[NSString stringWithFormat:@"%@", editedFieldName]];
// Pass current value to the edited object, then pop.
if (self.editType == EditingViewControllerTypeDate) {
[editedObject setValue:datePicker.date forKey:editedFieldKey];
}
else if (self.editType == EditingViewControllerTypeDouble) {
NSNumber *number = [NSNumber numberWithDouble:[textField.text doubleValue]];
[editedObject setValue:number forKey:editedFieldKey];
}
else if (self.editType == EditingViewControllerTypeString) {
[editedObject setValue:textField.text forKey:editedFieldKey];
}
else if (self.editType == EditingViewControllerTypePhone) {
[editedObject setValue:textField.text forKey:editedFieldKey];
}
[self.navigationController popViewControllerAnimated:YES];
}
- (IBAction)cancel {
// Don't pass current value to the edited object, just pop.
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark -
#pragma mark Memory management
- (void)dealloc {
[textField release];
[editedObject release];
[editedFieldKey release];
[editedFieldName release];
[datePicker release];
[super dealloc];
}
@end