project_files/HedgewarsMobile/Classes/EditableCellView.m
changeset 3697 d5b30d6373fc
parent 3667 9359a70df013
child 3782 dc3531e49e4c
equal deleted inserted replaced
3695:c11abf387a7d 3697:d5b30d6373fc
    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