2009-12-27 5 views
3

Хорошо, я постараюсь объяснить это как можно лучше. У меня есть приложение для iPhone, и у него есть текстовое поле, которое пользователь может только вводить Numbers. Не проблема. Тем не менее, на кнопке numpad нет кнопки, поэтому я не могу заставить ее исчезнуть. Я мог бы сделать кнопку, которую пользователь нажимает, чтобы отклонить клавиатуру, но я предпочел бы сделать кнопку, потому что экран «занят», как есть.Удалите кнопку «Готово» с цифровой клавиатуры на новой клавиатуре Загрузка

Ну, после некоторых исследований я наткнулся на this. Вау, это здорово. Однако у меня также есть другое текстовое поле, которое требует клавиатуры по умолчанию. И всякий раз, когда клавиатура появляется, независимо от типа, на ней есть кнопка «Готово».

Не хорошо.

Так что я еще немного копаю. Прочитайте комментарии, и люди упомянули способ избавиться от кнопки «Готово», используя свойство «Редактирование на начальном этапе», чтобы вызвать код «Готово», когда это необходимо. Я также получил это в основном. Если вы введете числовое поле и затем отпустите клавиатуру, а затем введите нормальное поле, кнопка «Готово» не появится.

Однако есть одна ошибка, в которой все еще появляется кнопка «Готово». Если вы нажмете «Числовое поле», а затем коснитесь поля «Нормальное», клавиатура никогда не «исчезнет», поэтому, даже если она изменится с цифровой клавиатуры на обычную клавиатуру, кнопка все еще присутствует. Я хочу удалить buttom из представления, но я не уверен, как это сделать. Это код, у меня есть ...

//Done button for numpad 
- (void)keyboardWillShow:(NSNotification *)note { 
    if (showDoneButton == YES) 
    { 


    // create custom button 
    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    doneButton.frame = CGRectMake(0, 163, 106, 53); 
    doneButton.adjustsImageWhenHighlighted = NO; 
    if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3"]) { 
     [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 view found; add the custom button to it 
     if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) 
      [keyboard addSubview:doneButton]; 
    } 
     showDoneButton = NO; //This tells done button code to run or not 
    } 
} 

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

Когда NumPadfield запускает «редактирование было начать» вызывает эту функцию:

- (IBAction)needNumberPad:(id)sender{ 
    showDoneButton = YES; 
} 

Который затем убеждается проделанная кнопка отображается. Когда делается код кнопки завершения, переменная (как показано выше) установлена ​​на NO, поэтому она не появляется снова, если вы нажмете текстовое поле по умолчанию. По умолчанию для переменной Boolean установлено значение NO.

Что нужно сделать, если вы сразу же перейдете к редактированию поля numPad в поле по умолчанию, кнопка «Готово» исчезнет. Я могу поместить код в функцию, которая вызывается, когда «Редактирование закончилось», но я не знаю, что туда положить. Помощь будет оценена, я получил это далеко!

Спасибо!

ответ

1

a. Сначала сделайте doneButton экземпляром вашего класса, это поможет вам сохранить ссылку на кнопку

b. Добавьте этот код в начале ур keyboardWillShow: (NSNotification *) Примечание метод

if(!showDoneButton){ 
     if(doneButton){ 
[doneButton removeFromSuperview]; 
doneButton = nil; 
     } 
     return; 
} 

гр. добавить уведомление для keyBoardWillHide

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillHide:) 
              name:UIKeyboardWillHideNotification 
              object:nil]; 

d.в методе keyBoardWillHide сделать следующее

- (void)keyboardWillHide:(NSNotification *)note 
{ 
if(doneButton) 
{ 
    [doneButton removeFromSuperview]; 
    doneButton = nil; 
} 
} 

Это должно сделать трюк

0

Вы можете использовать метод ниже:

//This delegate notify when the user done from the textfield 
- (void) textFieldDidEndEditing:(UITextField *)textField{ 
    [yourTextField resignFirstResponder]; 
    [doneButton removeFromSuperview]; 
    doneButton = nil; 
} 

yourTextField означает текстовое поле, которое содержит кнопку Готово на клавиатуре. Предыдущий метод удалит doneButton со следующей клавиатуры.

Смежные вопросы