Я действительно не могу понять, почему 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];
}
}