UIKeyboardTypeNumberPad без готовой кнопки - PullRequest
9 голосов
/ 28 января 2011

Как мы можем реализовать UIKeyboardTypeNumberPad, чтобы он имел кнопку «Готово»?По умолчанию его нет.

Ответы [ 4 ]

13 голосов
/ 28 января 2011

Если я не ошибаюсь, Вы хотите узнать, как добавить пользовательскую кнопку «Готово» на клавиатуру для UIKeyboardTypeNumberPad.В этом случае это может быть полезно.Объявите UIButton * doneButton in.h и добавьте следующий код в файл .m

- (void)addButtonToKeyboard {
    // create custom button
    if (doneButton == nil) {
        doneButton  = [[UIButton alloc] initWithFrame:CGRectMake(0, 163, 106, 53)];
    }
    else {
        [doneButton setHidden:NO];
    }

    [doneButton addTarget:self action:@selector(doneButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    // locate keyboard view
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    UIView* keyboard = nil;
    for(int i=0; i<[tempWindow.subviews count]; i++) {
        keyboard = [tempWindow.subviews objectAtIndex:i];
        // keyboard found, add the button
        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)doneButtonClicked:(id)Sender {
//Write your code whatever you want to do on done button tap
//Removing keyboard or something else
}

Я использую то же самое в моем приложении, и таким образом настраивается рамка кнопки. Таким образом, можно вызвать [self addButtonToKeyboard]всякий раз, когда вам нужно показать готовую кнопку на клавиатуре.UIKeyboardTypeNumberPad не имеет кнопки Готово в противном случае. enter image description here

2 голосов
/ 27 ноября 2012
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardDidShowNotification object:nil];


//Call this method 

- (void)keyboardWillShow:(NSNotification *)note {


   UIButton *doneButton  = [[UIButton alloc] initWithFrame:CGRectMake(0, 163, 106, 53)];
    doneButton.adjustsImageWhenHighlighted = NO;
    [doneButton setImage:[UIImage imageNamed:@"Done.png"] forState:UIControlStateNormal];
   [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    UIView* keyboard;
    for(int i=0; i<[tempWindow.subviews count]; i++) {
        keyboard = [tempWindow.subviews objectAtIndex:i];

        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];
        }
    }

}
1 голос
/ 20 марта 2012

Если у кого-то возникла проблема с тем, что кнопка DONE продолжает появляться, когда вы пытаетесь загрузить другие типы клавиатур в одно и то же приложение, я знаю, что во многих приложениях есть такая проблема. Во всяком случае, вот как я решил это: В вашем ViewController (тот же viewcontroller, который вы добавили кнопку DONE), добавьте этот код (как есть), и он должен решить ваши проблемы с кнопкой DONE, которые продолжают появляться. Надеюсь, это поможет некоторым людям.

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];   
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];

} else {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];  
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

}

1 голос
/ 05 декабря 2011

Проблема с iOS 5 решена. Спасибо миллион.

У меня была проблема с отображением кнопки Готово.

Заменены:

 if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
     [keyboard addSubview:doneButton];

, который не отображал кнопку «Готово» в iOS 5 ...

С:

 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];
 }

работал лакомство. Ты звезда. Спасибо, Никола; -)

...