Добавление панели инструментов в верхней части клавиатуры
У меня есть панель инструментов, и я хотел бы разместить ее на верхней части клавиатуры.
В уведомлении о вводе с клавиатуры я попытался добавить панель инструментов на клавиатуру, но безуспешно, я не могу добавить
пожалуйста, дайте мне знать
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView* keyboard;
for(int i = 0; i < [tempWindow.subviews count]; i++)
{
//Get a reference of the current view
keyboard = [tempWindow.subviews objectAtIndex:i];
//Check to see if the description of the view we have referenced is "UIKeyboard" if so then we found
//the keyboard view that we were looking for
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
{
[keyboard addSubview:myToolbar];
}
}
5 ответов
Я думаю, вы хотите inputAccessoryView.
По сути, вы создаете представление и устанавливаете его как вспомогательное представление ввода текстового поля или текстового представления.
[textField setInputAccessoryView:inputAccessoryView];
Вот код на тот случай, если это кому-то понадобится. Обнаружено переполнение стека
- (void)viewDidLoad
{
[super viewDidLoad];
UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
numberToolbar.barStyle = UIBarStyleBlackTranslucent;
numberToolbar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc]initWithTitle:@"Clear" style:UIBarButtonItemStyleBordered target:self action:@selector(clearNumberPad)],
[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
[[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],
nil];
[numberToolbar sizeToFit];
numberTextField.inputAccessoryView = numberToolbar;
}
-(void)clearNumberPad{
[numberTextField resignFirstResponder];
numberTextField.text = @"";
}
-(void)doneWithNumberPad{
NSString *numberFromTheKeyboard = numberTextField.text;
[numberTextField resignFirstResponder];
}
https://github.com/asefnoor/IQKeyboardManager
Это лучший обработчик клавиатуры, который я видел. Очень отличный способ управлять вводом текста.
Некоторые из его особенностей 1) ZERO LINE OF CODE
2) работает автоматически
3) Нет больше UIScrollView
4) Нет больше подклассов
5) Нет больше ручной работы
6) Нет больше # импорт
Если вы хотите добавить панель инструментов на клавиатуре, вы находитесь в правильном месте. Вы можете использовать BSKeyboard легко. Посмотрите на реализацию ниже;
в.h файле
#import "BSKeyboardControls.h"
добавить делегатов
@interface ViewController : UIViewController <BSKeyboardControlsDelegate>
Теперь перейдите к файлу.m, перейдите к viewDidLoad. Мы добавим текстовое поле, которое я хочу добавить Tollbar
self.keyboardControls = [[BSKeyboardControls alloc] initWithFields:@[PINTextField]];
[self.keyboardControls addDelegate:self];
мы должны добавить activeField, как показано ниже,
- (void)textFieldDidBeginEditing:(UIView *)textField {
[self.keyboardControls setActiveField:textField];
}
И последний шаг - реализация методов делегата,
- (void)keyboardControlsDonePressed:(BSKeyboardControls *)keyboardControls {
[super textFieldShouldReturn:self.keyboardControls.activeField];
}
Вот и все.
Для получения дополнительной информации и загрузки файлов BSKeyboard, вы можете переместить ссылку ниже BSKeyboard Githup Link
Простое решение для iOS 8 и 9.
Начни свой textField
, searchBar
и т.п.
customView
- Вид, который будет придерживаться в верхней части клавиатуры. НЕ добавляйте это как подпредставление к иерархии! Не нужно устанавливать какие-либо ограничения или позиции.
[searchBar setInputAccessoryView:self.customView];
- (BOOL)canBecomeFirstResponder{
return true;
}
- (UIView *)inputAccessoryView {
return self.customView;
}
Если вам нужно оставить customView внизу и не скрывать его после закрытия клавиатуры, добавьте наблюдателя:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:self.view.window];
И метод
- (void)keyboardDidHide:(NSNotification *)notification {
[self becomeFirstResponder];
}