13 @synthesize delegate, textField, titleLabel, minimumCharacters, maximumCharacters, oldValue; |
13 @synthesize delegate, textField, titleLabel, minimumCharacters, maximumCharacters, oldValue; |
14 |
14 |
15 -(id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { |
15 -(id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { |
16 if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) { |
16 if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) { |
17 delegate = nil; |
17 delegate = nil; |
18 |
18 |
19 textField = [[UITextField alloc] initWithFrame:CGRectZero]; |
19 textField = [[UITextField alloc] initWithFrame:CGRectZero]; |
20 textField.backgroundColor = [UIColor clearColor]; |
20 textField.backgroundColor = [UIColor clearColor]; |
21 textField.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; |
21 textField.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; |
22 textField.delegate = self; |
22 textField.delegate = self; |
23 textField.clearButtonMode = UITextFieldViewModeWhileEditing; |
23 textField.clearButtonMode = UITextFieldViewModeWhileEditing; |
24 textField.clearsOnBeginEditing = NO; |
24 textField.clearsOnBeginEditing = NO; |
25 textField.returnKeyType = UIReturnKeyDone; |
25 textField.returnKeyType = UIReturnKeyDone; |
26 textField.adjustsFontSizeToFitWidth = YES; |
26 textField.adjustsFontSizeToFitWidth = YES; |
27 [textField addTarget:self action:@selector(save:) forControlEvents:UIControlEventEditingDidEndOnExit]; |
27 [textField addTarget:self action:@selector(save:) forControlEvents:UIControlEventEditingDidEndOnExit]; |
28 |
28 |
29 [self.contentView addSubview:textField]; |
29 [self.contentView addSubview:textField]; |
30 //[textField release]; |
30 //[textField release]; |
31 |
31 |
32 titleLabel = [[UILabel alloc] init]; |
32 titleLabel = [[UILabel alloc] init]; |
33 titleLabel.textAlignment = UITextAlignmentLeft; |
33 titleLabel.textAlignment = UITextAlignmentLeft; |
34 titleLabel.backgroundColor = [UIColor clearColor]; |
34 titleLabel.backgroundColor = [UIColor clearColor]; |
35 titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; |
35 titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; |
36 [self.contentView addSubview:titleLabel]; |
36 [self.contentView addSubview:titleLabel]; |
37 //[titleLabel release]; |
37 //[titleLabel release]; |
38 |
38 |
39 minimumCharacters = 1; |
39 minimumCharacters = 1; |
40 maximumCharacters = 64; |
40 maximumCharacters = 64; |
41 oldValue = nil; |
41 oldValue = nil; |
42 } |
42 } |
43 return self; |
43 return self; |
46 -(void) layoutSubviews { |
46 -(void) layoutSubviews { |
47 [super layoutSubviews]; |
47 [super layoutSubviews]; |
48 |
48 |
49 CGRect contentRect = self.contentView.bounds; |
49 CGRect contentRect = self.contentView.bounds; |
50 CGFloat boundsX = contentRect.origin.x; |
50 CGFloat boundsX = contentRect.origin.x; |
51 |
51 |
52 int offset = 0; |
52 int offset = 0; |
53 int skew = 0; |
53 int skew = 0; |
54 if (self.imageView != nil) |
54 if (self.imageView != nil) |
55 offset += self.imageView.frame.size.width; |
55 offset += self.imageView.frame.size.width; |
56 |
56 |
57 if ([self.titleLabel.text length] == 0) |
57 if ([self.titleLabel.text length] == 0) |
58 titleLabel.frame = CGRectZero; |
58 titleLabel.frame = CGRectZero; |
59 else { |
59 else { |
60 titleLabel.frame = CGRectMake(boundsX+offset+10, 10, 100, [UIFont labelFontSize] + 4); |
60 titleLabel.frame = CGRectMake(boundsX+offset+10, 10, 100, [UIFont labelFontSize] + 4); |
61 offset += 100; |
61 offset += 100; |
92 |
92 |
93 // the textfield is being modified, update the navigation controller |
93 // the textfield is being modified, update the navigation controller |
94 -(void) textFieldDidBeginEditing:(UITextField *)aTextField{ |
94 -(void) textFieldDidBeginEditing:(UITextField *)aTextField{ |
95 // don't interact with table below |
95 // don't interact with table below |
96 ((UITableView*)[self superview]).scrollEnabled = NO; |
96 ((UITableView*)[self superview]).scrollEnabled = NO; |
97 |
97 |
98 self.oldValue = self.textField.text; |
98 self.oldValue = self.textField.text; |
99 |
99 |
100 UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Cancel",@"") |
100 UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Cancel",@"") |
101 style:UIBarButtonItemStylePlain |
101 style:UIBarButtonItemStylePlain |
102 target:self |
102 target:self |
103 action:@selector(cancel:)]; |
103 action:@selector(cancel:)]; |
104 [(UITableViewController *)delegate navigationItem].leftBarButtonItem = cancelButton; |
104 [(UITableViewController *)delegate navigationItem].leftBarButtonItem = cancelButton; |
105 [cancelButton release]; |
105 [cancelButton release]; |
106 |
106 |
107 UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Save",@"") |
107 UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Save",@"") |
108 style:UIBarButtonItemStyleDone |
108 style:UIBarButtonItemStyleDone |
109 target:self |
109 target:self |
110 action:@selector(save:)]; |
110 action:@selector(save:)]; |
111 [(UITableViewController *)delegate navigationItem].rightBarButtonItem = saveButton; |
111 [(UITableViewController *)delegate navigationItem].rightBarButtonItem = saveButton; |
114 |
114 |
115 /* with this a field might remain in editing status even if the view moved; |
115 /* with this a field might remain in editing status even if the view moved; |
116 use method below instead that allows some more interaction |
116 use method below instead that allows some more interaction |
117 // don't accept 0-length strings |
117 // don't accept 0-length strings |
118 -(BOOL) textFieldShouldEndEditing:(UITextField *)aTextField { |
118 -(BOOL) textFieldShouldEndEditing:(UITextField *)aTextField { |
119 return ([aTextField.text length] > 0); |
119 return ([aTextField.text length] > 0); |
120 } |
120 } |
121 */ |
121 */ |
122 |
122 |
123 -(BOOL) textFieldShouldReturn:(UITextField *)aTextField { |
123 -(BOOL) textFieldShouldReturn:(UITextField *)aTextField { |
124 return ([aTextField.text length] >= self.minimumCharacters); |
124 return ([aTextField.text length] >= self.minimumCharacters); |
125 } |
125 } |
126 |
126 |
127 // the textfield has been modified, tell the delegate to do something |
127 // the textfield has been modified, tell the delegate to do something |
128 -(void) textFieldDidEndEditing:(UITextField *)aTextField{ |
128 -(void) textFieldDidEndEditing:(UITextField *)aTextField{ |
129 ((UITableView*)[self superview]).scrollEnabled = YES; |
129 ((UITableView*)[self superview]).scrollEnabled = YES; |
130 |
130 |
131 [(UITableViewController *)delegate navigationItem].rightBarButtonItem = [(UITableViewController *)delegate navigationItem].backBarButtonItem; |
131 [(UITableViewController *)delegate navigationItem].rightBarButtonItem = [(UITableViewController *)delegate navigationItem].backBarButtonItem; |
132 [(UITableViewController *)delegate navigationItem].leftBarButtonItem = nil; |
132 [(UITableViewController *)delegate navigationItem].leftBarButtonItem = nil; |
133 } |
133 } |
134 |
134 |
135 #pragma mark - |
135 #pragma mark - |
147 |
147 |
148 // send the value to the delegate |
148 // send the value to the delegate |
149 -(void) save:(id) sender { |
149 -(void) save:(id) sender { |
150 if (delegate == nil || ![delegate respondsToSelector:@selector(saveTextFieldValue:withTag:)]) |
150 if (delegate == nil || ![delegate respondsToSelector:@selector(saveTextFieldValue:withTag:)]) |
151 return; |
151 return; |
152 |
152 |
153 // don't save if the textfield is invalid |
153 // don't save if the textfield is invalid |
154 if (![self textFieldShouldReturn:textField]) |
154 if (![self textFieldShouldReturn:textField]) |
155 return; |
155 return; |
156 |
156 |
157 [delegate saveTextFieldValue:self.textField.text withTag:self.tag]; |
157 [delegate saveTextFieldValue:self.textField.text withTag:self.tag]; |
158 [self.textField resignFirstResponder]; |
158 [self.textField resignFirstResponder]; |
159 self.oldValue = nil; |
159 self.oldValue = nil; |
160 } |
160 } |
161 |
161 |