Когда эта проблема с клавиатурой NumPad будет решена? - ПОМОГИТЕ!

Я действительно не могу понять, почему Apple не поставила кнопку DONE на клавиатуре NumPad.

Были некоторые доступные решения, но обновление 4.2 отключено.

Я ищу решение проблемы для 4.2. Кроме того, если возможно для answer, если можно создать открытый исходный код, легко интегрировать, решение, чтобы я мог получить\сделать и опубликовать.

Кроме того, я хотел бы знать, как я могу отказаться от закрытия клавиатуры, если вход неверен (что является возможным уродливым решением проблемы - убедитесь, что не введены илагальные символы)

Спасибо.

Ответ 1

Хотя кажется, что решения, работающие с предварительным iOS 4.2, больше не функционируют, решение, которое я использую, добавляет кнопку в UIWindow, наблюдая за UIKeyboardWillAppearNotification. После небольшой задержки я быстро угасаю кнопку. Не идеально; но это не выглядит ужасно.

Я также наблюдаю UIKeyboardWillHideNotification. Здесь исчезновение будет неприглядным, потому что оно будет исчезать, пока клавиатура скользит снизу. Чтобы представить иллюзию, что клавиатура и кнопка увольнения увольняются вместе, я слегка сдвигаю кнопку увольнения при затухании:

_keyboardDisappearanceObserver = [[NOTIFIER addObserverForName:UIKeyboardWillHideNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
        [UIView animateWithDuration:0.1 
                         animations:^(void) {
                             _dismissButton.alpha = 0.0;
                             CGRect buttonFrame = _dismissButton.frame;
                             buttonFrame.origin.y += 25;
                             _dismissButton.frame = buttonFrame;
                         } 
                         completion:^(BOOL finished) {
                             [_dismissButton removeFromSuperview];
                             CGRect buttonFrame = _dismissButton.frame;
                             buttonFrame.origin.y -= 25;
                             _dismissButton.frame = buttonFrame;
                         }];
    }] retain];

Возможно, подобное решение будет работать для внешнего вида клавиатуры.

Кстати, я нашел кнопки увольнения: кнопка UIControlStateNormal и Кнопка UIControlStateHighlighted

Ответ 2

Это не мое решение, я нашел его на одном из нескольких сообщений в блоге после траления. Работает на iOS 5.0

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardDidShow:) 
                                                 name:UIKeyboardDidShowNotification 
                                               object:nil]; 
}

- (void)keyboardDidShow:(NSNotification *)note {
    [self addDoneButtonToKeyboard];
}

-(void)addDoneButtonToKeyboard {
        UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
        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(resignTextView:) forControlEvents:UIControlEventTouchUpInside];

        UIWindow* keyboardView = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
        [self insertDoneKey:keyboardView button:doneButton];
}

- (void)insertDoneKey:(UIView*)view button:(UIButton*) button {
        int keyIndex = 0;
        for (UIView* subview in view.subviews) {
            if([[subview description] rangeOfString:@"UIKBKeyView"].location!=NSNotFound) {
                // NSLog(@"Found Keyboard KeyIndex:%d descr: %@",keyIndex,[subview description]);
                if (keyIndex==9) {
                    // NSLog(@"Returning bottom left key view");
                    button.frame=CGRectMake(0, 0, subview.frame.size.width, subview.frame.size.height);
                    button.bounds=CGRectMake(0, 0, subview.frame.size.width, subview.frame.size.height);
                    [subview setUserInteractionEnabled:YES];
                    [subview addSubview:button];
                    [subview bringSubviewToFront:button];
                }
                keyIndex++;
            }
            [self insertDoneKey:subview button:button];
        }
}