2011-04-28 3 views
0

J'ai un formulaire d'enregistrement qui a cinq champs de texte dans lequel un champ de texte est numéro de téléphone et nous prenons le clavier pour ce numéro, mais pas de bouton sur pavé numérique. J'ajoute le bouton done mais le bouton est ajouté pour tous les champs de texte mais je ne veux que pour le champ phonenumber. S'il vous plaît, aidez comment résoudre ce problème. mon code est ..Ajout d'un bouton sur le pavé numérique

- (void)viewDidLoad 
{ 
    self.navigationController.navigationBarHidden = NO; 
    self.navigationController.navigationBar.tintColor = [UIColor blackColor]; 

    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonAction)]; 
    self.navigationItem.leftBarButtonItem = leftButton; 
// UIBarButtonItem *rightbarButton = [[UIBarButtonItem alloc]initWithTitle:@"About" style:UIBarButtonItemStyleBordered target:self action:@selector(AboutButtonAction)]; 
// self.navigationItem.rightBarButtonItem = rightbarButton; 
    [super viewDidLoad]; 
    NSLog(@"Events Id is : %@", particularEventId); 
    phoneNumber = [[UITextField alloc] initWithFrame:CGRectMake(56, 223, 220, 31)]; 
    phoneNumber.borderStyle = UITextBorderStyleRoundedRect; 
    phoneNumber.keyboardType = UIKeyboardTypeNumberPad; 
    phoneNumber.returnKeyType = UIReturnKeyDone; 
    phoneNumber.textAlignment = UITextAlignmentLeft; 

    [self.view addSubview:phoneNumber]; 
    // add observer for the respective notifications (depending on the os version) 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(keyboardDidShow:) 
                name:UIKeyboardDidShowNotification 
                object:nil];  
    } else { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(keyboardWillShow:) 
                name:UIKeyboardWillShowNotification 
                object:nil]; 
    } 
} 

- (void)addButtonToKeyboard { 
    // create custom button 

    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    doneButton.frame = CGRectMake(0, 163, 106, 53); 
    doneButton.adjustsImageWhenHighlighted = NO; 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.0) { 
     [doneButton setImage:[UIImage imageNamed:@"DoneUp3.png"] forState:UIControlStateNormal]; 
     [doneButton setImage:[UIImage imageNamed:@"DoneDown3.png"] forState:UIControlStateHighlighted]; 
    } else {   
     [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal]; 
     [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted]; 
    } 
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside]; 
    // locate keyboard view 
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
    UIView* keyboard; 
    for(int i=0; i<[tempWindow.subviews count]; i++) { 
     keyboard = [tempWindow.subviews objectAtIndex:i]; 
     // keyboard found, add the button 
     if(keyboard == phoneNumber) 
     { 
     if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) { 
      if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) 
       [keyboard addSubview:doneButton]; 
     } else { 
      if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) 
       [keyboard addSubview:doneButton]; 
     } 
    } 
    } 
} 

- (void)keyboardWillShow:(NSNotification *)note { 
    // if clause is just an additional precaution, you could also dismiss it 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 3.2) { 
     [self addButtonToKeyboard]; 
    } 
} 

- (void)keyboardDidShow:(NSNotification *)note { 
    // if clause is just an additional precaution, you could also dismiss it 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) { 
     [self addButtonToKeyboard]; 
    } 
} 


- (void)doneButton:(id)sender { 
    NSLog(@"doneButton"); 
    NSLog(@"Input: %@", phoneNumber.text); 
    [phoneNumber resignFirstResponder]; 
} 

Merci à l'avance:

+0

Jetez un oeil à cette [réponse.] (Http://stackoverflow.com/a/20192857/1603072) – Bhavin

Répondre

2

J'ai utilisé ce code pour mon projet, je pense que ce n'est pas optimisé mais il fonctionne très bien.

.h

BOOL firstTime; 
BOOL add; 
BOOL keyboardOpened; 

.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    firstTime = TRUE; 
    add = TRUE; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 
} 

- (void)addButtonToKeyboard { 
    // create custom button 
    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    doneButton.frame = CGRectMake(0, 163, 106, 53); 
    doneButton.adjustsImageWhenHighlighted = NO; 
    [doneButton setImage:[UIImage imageNamed:@"DoneUp3.png"] forState:UIControlStateNormal]; 
    [doneButton setImage:[UIImage imageNamed:@"DoneDown3.png"] forState:UIControlStateHighlighted]; 
    doneButton.tag = 3; 
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside]; 
    // locate keyboard view 
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
    UIView* keyboard; 
    for(int i=0; i<[tempWindow.subviews count]; i++) { 
     keyboard = [tempWindow.subviews objectAtIndex:i]; 
     // keyboard found, add the button 
     if ([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES && add) [keyboard addSubview:doneButton]; 
    } 
} 

- (void)removeButtonFromKeyboard 
{ 
    // locate keyboard view 
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
    UIView* keyboard; 
    for(int i=0; i<[tempWindow.subviews count]; i++) { 
     keyboard = [tempWindow.subviews objectAtIndex:i]; 
     // keyboard found, remove the button 
     if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) [[keyboard viewWithTag:3] removeFromSuperview]; 
    } 
} 

- (void)doneButton:(id)sender { 
    [firstResponder resignFirstResponder]; 
    if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad"] && ![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"]) 
    { 
     [self removeButtonFromKeyboard]; 
     firstTime = TRUE; 
    } 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
} 

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    firstResponder = textField; 

    for (int i = 0; i < [[[profile operationObject] keys] count]; i++) 
    { 
     if ([[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] viewWithTag:1] isEqual:textField]) 
     { 
      editingPath = [NSIndexPath indexPathForRow:i inSection:0]; 
      break; 
     } 
    } 

    if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad"] && ![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"]) 
    { 
     if(!firstTime) 
     { 
      if(textField.keyboardType == UIKeyboardTypeNumberPad) 
      { 
       add = TRUE; 
       [self addButtonToKeyboard]; 
      } 
      else 
      { 
       add = FALSE; 
      } 
     } 
     else 
     { 
      firstTime = FALSE; 
      if(textField.keyboardType != UIKeyboardTypeNumberPad) 
      { 
       add = FALSE; 
      } 
     } 
     keyboardOpened = TRUE; 
    } 
} 

- (void)keyboardDidShow:(id)sender 
{ 
    if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad"] && ![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"]) 
    { 
     NSLog(@"%@",[[UIDevice currentDevice] model]); 
     [self addButtonToKeyboard]; 
     keyboardOpened = TRUE; 
    } 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [[[profile operationObject] values] replaceObjectAtIndex:[editingPath row] withObject:[textField text]]; 
    firstResponder = nil; 

    if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad"] && ![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"]) 
    { 
     [self removeButtonFromKeyboard]; 
     keyboardOpened = FALSE; 
    } 
} 
Questions connexes