UIKeyboardTypeNumberPad кнопка возврата или готово в iOS 5 - PullRequest
6 голосов
/ 14 октября 2011

В iOS 3 этот обходной путь включал создание пользовательского UIButton и добавление его в качестве подпредставления к клавиатуре Apple. Когда вышла iOS 4, изменилось представление о том, что подпредставление было добавлено. Таким образом, чтобы это работало в iOS3 & 4, у меня было следующее.

-(void) addDoneButtonToNumericKeyboard {
if(doneButtonIsAdded) {
    return;
}
if(doneButtonForNumericKeyboard == nil) {
    doneButtonForNumericKeyboard= [[UIButton buttonWithType:UIButtonTypeCustom] retain];
    doneButtonForNumericKeyboard.frame = CGRectMake(0, 163, 106, 53);
    doneButtonForNumericKeyboard.adjustsImageWhenHighlighted = NO;
    if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3"]) {
        [doneButtonForNumericKeyboard setImage:[UIImage imageNamed:@"DoneUp3.png"] forState:UIControlStateNormal];
        [doneButtonForNumericKeyboard setImage:[UIImage imageNamed:@"DoneDown3.png"] forState:UIControlStateHighlighted];
    } else {        
        [doneButtonForNumericKeyboard setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
        [doneButtonForNumericKeyboard setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
    }
    [doneButtonForNumericKeyboard addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
}
// locate keyboard view
NSArray *winArray = [[UIApplication sharedApplication] windows];
if(winArray == nil || [winArray count] < 2) {
    NSLog(@"No winArray found!");
    return;
}
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
    NSLog(@"Keyboard description : %@", [keyboard description]);
    if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES || [[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
        NSLog(@"Attaching done button");
        [keyboard addSubview:doneButtonForNumericKeyboard];
        doneButtonIsAdded = YES;
    }
}
}

У кого-нибудь есть идеи, как заставить это работать на iOS 5?

Ни один из вышеперечисленных методов не работает для 5. Есть попытка добавить подпредставление, которое кажется успешным, но ничего не отображается. Область на экране просто пустая и не реагирует на прикосновения.

Ответы [ 2 ]

9 голосов
/ 18 октября 2011

Я тоже это заметил, и единственное исправление, которое мне удалось найти, это изменить его с: keyboardWillShow: на keyboardDidShow:. Разница между «волей» и «делом», очевидно, является еще одним обсуждением, но, похоже, это исправлено для моих нужд.

Надеюсь, это поможет.

Еще кое-что из того, что я обнаружил, заключается в том, что [[UIApplication sharedApplication] windows] первый объект действительно существует, но второй объект с индексом 1 пропал. Интересно, что вызвало это.

Спасибо.

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

Мне повезло найти это:

Заменить: если ([[описание клавиатуры] hasPrefix: @ "

С: if ([[[UIDevice currentDevice] systemVersion] floatValue]> = 3.2) {if ([[описание клавиатуры] hasPrefix: @ "

Ссылка на эту ссылку: UIKeyboardTypeNumberPad без кнопки" Готово "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...