Отключение клавиш на клавиатуре

Я новичок в Objective-C, и я хочу ограничить переход пользователя с части алфавита обычной клавиатуры на цифровую / пунктуационную сторону. Говоря это, я хотел бы отключить кнопку на клавиатуре, которая делает переключатель. Возможно, я задаю неправильные параметры поиска, но я мало нахожу в Google и даже меньше в своих справочниках. Как я могу фактически отключить кнопку на клавиатуре iOS? С символами alpha / numeric / punctuation это легко сделать, просто игнорируя введенные символы, которые были введены, но кнопка, которая переключается между частями клавиатуры, выполняет действие, а не возвращает символ.

Спасибо за помощь!

Фактически вы можете добавлять и удалять кнопки по умолчанию для UIKeyboard

В Интернете есть несколько рецептов: http://www.iphonedevsdk.com/forum/iphone-sdk-development/6573-howto-customize-uikeyboard.html и вот так: http://www.iphonedevsdk.com/ форум / iphone-СДК-разработка / 6275-надстройка панель-топ-keyboard.html

Эти сообщения показывают, как добавить кнопку, однако тот же самый принцип можно использовать для удаления.

Ниже я покажу вам компиляцию одного из решений:

 //The UIWindow that contains the keyboard view - //It some situations it will be better to actually //iterate through each window to figure out where the keyboard is, // but In my applications case //I know that the second window has the keyboard so I just reference it directly // UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] // objectAtIndex:1]; //Because we cant get access to the UIKeyboard throught the SDK we will // just use UIView. //UIKeyboard is a subclass of UIView anyways UIView* keyboard; //Iterate though each view inside of the selected Window 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 className 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 is now a UIView reference to the // UIKeyboard we want. From here we can add a subview // to th keyboard like a new button //Do what ever you want to do to your keyboard here... } } 

Я реализовал более аккуратное решение. Хитрость заключается в том, чтобы поместить отключенное ключевое изображение поверх клавиатуры.

Сделать это

  1. Запустите эмулятор (в масштабе 100%) и захватите объект, который вам нужен (в моем случае это была отключенная кнопка «Готово» в нижнем правом конце)
  2. Поместите это изображение поверх клавиатуры

Обратите внимание, что клавиатура помещается в отдельный UIWindow (с iOS5, я считаю), и поэтому вам нужно будет сделать следующее

 + (void) addSubviewToTop:(UIView *)view { int count = [[[UIApplication sharedApplication] windows] count]; if(count <= 0) { warn(@"addSubviewToTop failed to access application windows"); } UIWindow *top_window = [[[UIApplication sharedApplication] windows] objectAtIndex:count-1]; [top_window addSubview:view]; [top_window bringSubviewToFront:view]; } 

Я не уверен, изменился ли SDK таким образом, что ответ @ppaulojr больше не работает, или если у меня есть вещи, созданные странно в моей системе, но со следующими твиками я смог заставить его работать!

Сообщения, связанные с ответом @ ppaulojr, велики ( http://www.iphonedevsdk.com/forum/iphone-sdk-development/6573-howto-customize-uikeyboard.html и http://www.iphonedevsdk.com/forum/ iphone-sdk-development / 6275-add-toolbar-top-keyboard.html ), и они помогли мне заставить это работать.

По-видимому, фактическое представление клавиатуры теперь внедрено в виде подсмотра в какой-то более грандиозной структуре представления UIKeyboard, так что речь идет о некоторой рекурсии. Я получил это для работы:

 -(void) findKeyboard { NSArray* windows = [[UIApplication sharedApplication] windows]; for (int i = 0; i < [windows count]; i++) { UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:i]; for(UIView *subView in [tempWindow subviews]) { [self checkViews:subView]; } } } -(void)checkViews:(UIView *)inView { for(UIView *keyboard in inView.subviews) { NSLog( @"ViewName: %@", [keyboard description] ); // Which view are we looking at //Check to see if the className 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 is now a UIView reference to the // UIKeyboard we want. From here we can add a subview // to th keyboard like a new button //Do what ever you want to do to your keyboard here... break; } // Recurse if not found [self checkViews:subView]; } } 

Я также обнаружил, что лучшим местом для вызова этой функции является -(void)textViewDidBeginEditing:(UITextView *)textView :

 - (void)textViewDidBeginEditing:(UITextView *)textView { NSLog(@"textViewDidBeginEditing"); [self findKeyboard]; } 

Это изменяет клавиатуру, как только клавиатура добавляется в окно, но прежде чем она на самом деле появится, так что все время, когда она поднимается снизу, она будет изменена.

Interesting Posts

эквивалент cURL в Swift – iOS

Преобразование UTC в локальное время в объекте C

iTunes Connect – не может приглашать «внутренние тестеры» для предварительного приложения

Как сделать текстовое поле «первым ответчиком» в UIAlertView

Ошибка проверки приложения IOS: произошла ошибка SSL, и безопасное подключение к серверу невозможно.

didRotateFromInterfaceOrientation срабатывает дважды при вращении

Можно ли использовать MonoTouch.Dialog с каскадными источниками данных?

Почему мой веб-сайт жалуется на ошибки?

Эффект Core Graphics на основе CGImage

Неожиданное увеличение размера приложения iOS с помощью TestFlight

Как создать настроенный nsdictionary из двух nsarrays

Внешний источник синхронизации с аудиоустройством usb в iOS

Zbar SDK и ios7 / xcode 5 – приложение достигает 100% использования процессора и памяти более 100 МБ

Как получить исходное имя файла в iOS?

Можно ли настроить планировщик задач для iOS?

Давайте будем гением компьютера.