UIKeyboardTypeNumberPad без готовой кнопки
Как мы можем реализовать UIKeyboardTypeNumberPad, чтобы он имел кнопку "Готово"? По умолчанию его нет.
4 ответа
Если я не ошибаюсь, Вы хотите спросить, как добавить пользовательскую кнопку "Готово" на клавиатуру для UIKeyboardTypeNumberPad. В этом случае это может быть полезно. Объявите UIButton * doneButton в.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 не имеет кнопки Готово.
[[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];
}
}
}
Проблема с 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];
}
Работал лакомство Ты звезда. Спасибо, Никола;-)
Если у кого-то возникла проблема с тем, что кнопка "Готово" продолжает появляться, когда вы пытаетесь загрузить другие типы клавиатур в одно и то же приложение, я знаю, что многие приложения имеют эту проблему. Во всяком случае, вот как я решил это: в вашем 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];
}
}