Не удается найти keyplane, который поддерживает тип 4 для клавиатуры iPhone-Portrait-NumberPad; используя 3876877096_Portrait_iPhone-Simple-Pad_Default
Я загрузил iOS 8 Gold Master для iPhone и SDK.
Я тестировал приложение, и он отлично работает, за исключением одного.
У меня есть текстовое поле, в котором появится номерная панель, если пользователь хочет ввести что-либо, кроме того, пользовательская кнопка добавляется в пустую область при появлении клавиатуры.
- (void)addButtonToKeyboard
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
// create custom button
UIButton * doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
doneButton.frame = CGRectMake(-2, 163, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
[doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
[doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
[doneButton addTarget:self action:@selector(saveNewLead:) forControlEvents:UIControlEventTouchUpInside];
// locate keyboard view
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
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];
}
}
}
}
Это работало до сих пор.
Прежде всего, я получаю это предупреждение:
Невозможно найти клавиатуру, поддерживающую тип 4 для клавиатуры iPhone-Portrait-цифровой блок; с помощью 3876877096_Portrait_iPhone-Simple-Pad_Default
то эта пользовательская кнопка также не отображается, что я думаю из-за этих двух строк:
if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
и
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
Любые предложения?
Ответы
Ответ 1
У меня тоже была эта проблема и я нашел решение.
Ниже приведен код, который будет работать для iOS 8.0, а также для версий ниже.
Я проверил это на iOS 7 и 8.0 (Xcode Version 6.0.1)
- (void)addButtonToKeyboard
{
// create custom button
self.doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
//This code will work on iOS 8.3 and 8.4.
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3) {
self.doneButton.frame = CGRectMake(0, [[UIScreen mainScreen] bounds].size.height - 53, 106, 53);
} else {
self.doneButton.frame = CGRectMake(0, 163+44, 106, 53);
}
self.doneButton.adjustsImageWhenHighlighted = NO;
[self.doneButton setTag:67123];
[self.doneButton setImage:[UIImage imageNamed:@"doneup1.png"] forState:UIControlStateNormal];
[self.doneButton setImage:[UIImage imageNamed:@"donedown1.png"] forState:UIControlStateHighlighted];
[self.doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
// locate keyboard view
int windowCount = [[[UIApplication sharedApplication] windows] count];
if (windowCount < 2) {
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 found, add the button
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3) {
UIButton *searchbtn = (UIButton *)[keyboard viewWithTag:67123];
if (searchbtn == nil)
[keyboard addSubview:self.doneButton];
} else {
if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
UIButton *searchbtn = (UIButton *)[keyboard viewWithTag:67123];
if (searchbtn == nil)//to avoid adding again and again as per my requirement (previous and next button on keyboard)
[keyboard addSubview:self.doneButton];
} //This code will work on iOS 8.0
else if([[keyboard description] hasPrefix:@"<UIInputSetContainerView"] == YES) {
for (int i = 0; i < [keyboard.subviews count]; i++)
{
UIView *hostkeyboard = [keyboard.subviews objectAtIndex:i];
if([[hostkeyboard description] hasPrefix:@"<UIInputSetHost"] == YES) {
UIButton *donebtn = (UIButton *)[hostkeyboard viewWithTag:67123];
if (donebtn == nil)//to avoid adding again and again as per my requirement (previous and next button on keyboard)
[hostkeyboard addSubview:self.doneButton];
}
}
}
}
}
}
>
- (void)removedSearchButtonFromKeypad
{
int windowCount = [[[UIApplication sharedApplication] windows] count];
if (windowCount < 2) {
return;
}
UIWindow *tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
for (int i = 0 ; i < [tempWindow.subviews count] ; i++)
{
UIView *keyboard = [tempWindow.subviews objectAtIndex:i];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.3){
[self removeButton:keyboard];
} else if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
[self removeButton:keyboard];
} else if([[keyboard description] hasPrefix:@"<UIInputSetContainerView"] == YES){
for (int i = 0 ; i < [keyboard.subviews count] ; i++)
{
UIView *hostkeyboard = [keyboard.subviews objectAtIndex:i];
if([[hostkeyboard description] hasPrefix:@"<UIInputSetHost"] == YES) {
[self removeButton:hostkeyboard];
}
}
}
}
}
- (void)removeButton:(UIView *)keypadView
{
UIButton *donebtn = (UIButton *)[keypadView viewWithTag:67123];
if(donebtn) {
[donebtn removeFromSuperview];
donebtn = nil;
}
}
Надеюсь это поможет.
Но я все еще получаю это предупреждение:
Не удается найти клавиатуру, которая поддерживает тип 4 для клавиатуры iPhone-Portrait-NumberPad; используя 3876877096_Portrait_iPhone-Simple-Pad_Default
Игнорируя это предупреждение, я получил его на работу. Пожалуйста, дайте мне знать, если вы сможете получить облегчение от этого предупреждения.
Ответ 2
У меня тоже была эта проблема после обновления до последней бета-версии Xcode. Настройки симулятора обновлены, поэтому обнаружилась клавиатура ноутбука (внешняя). Если вы просто нажмете:
iOS Simulator → Оборудование → Клавиатура → Подключить аппаратную клавиатуру
чтобы запись не была проверена, программная клавиатура будет отображаться еще раз.
Ответ 3
Эмулятор пытается найти цифровую клавиатуру на Mac, но этого не найдено (MacBook Pro, MacBook Air и "нормальная/малая" клавиатура не имеют). Вы можете отменить выбор опции "Подключить аппаратную клавиатуру" или просто проигнорировать сообщение об ошибке, это не окажет отрицательного влияния на приложение.
Ответ 4
Я использую xcode с ios 8, просто снимите флажок соединить клавиатуру гарнитуры в вашей Simulator- > Hardware- > Keyboard- > Connect Hardware Keyboard.
Это решит проблему.
Ответ 5
Просто зайдите в
Симулятор iOS → Оборудование → Клавиатура → Снимите флажок Подключить аппаратную клавиатуру.
Это решит проблему.
Ваша клавиатура MAC не будет работать после выполнения вышеуказанного шага. Вы должны использовать симулятор клавиатуры.
Ответ 6
У меня была такая же проблема в Xcode 8.1 и iOS 10.1. Для меня работала в Simulator- > Hardware- > Keyboard и сняла флажок Connect Hardware Keyboard.
Ответ 7
Запустите приложение с помощью симулятора
iOS Simulator- > Hardware- > Keyboard → iOS использует ту же компоновку, что и OS X
Это исправит проблему, если кто-то там запускает приложение на своем устройстве
Ответ 8
Войдите в Симулятор- > Оборудование- > Клавиатура и снимите флажок Подключить аппаратную клавиатуру.
То же самое, что и многие ответы выше НО не изменились для меня, пока я не уйду и не перезапущу симулятор. xcode 8.2.1 и Simulator 10.0.
Ответ 9
Я получил то же сообщение об ошибке по двум причинам, поэтому вы можете добавить их в свой контрольный список отладки:
Контекст: Xcode 6.4, iOS: 8.4. Я добавил панель инструментов с пользовательским UIBarButton
для загрузки с помощью UIKeyboardTypeNumberPad
(Swift: UIKeyboardType.numberPad
), а именно "Готово" и "+/-". У меня была эта проблема, когда:
-
Мой UIToolbar был объявлен как свойство, но я забыл явно указать /init it.
-
Я оставил последнюю строку, [myCustomToolbar sizeToFit];
, которая похожа на ту же семью, что и Holden (мой код здесь: fooobar.com/questions/54229/...).
Удачи.
Ответ 10
У меня была та же проблема, что и профиль распределения. Убедитесь, что вы используете профиль разработчика
Ответ 11
Почему длинный код и не использовать UIToolbar? поскольку предупреждение все еще сохраняется?
UIToolbar работает для любой версии iOS здесь, мой пример кода
UIToolbar *doneToolbar = [[UIToolbar alloc] initWithFrame:(CGRect){0, 0, 50, 50}]; // Create and init
doneToolbar.barStyle = UIBarStyleBlackTranslucent; // Specify the preferred barStyle
doneToolbar.items = @[
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(doneEditAction)] // Add your target action
]; // Define items -- you can add more
yourField.inputAccessoryView = doneToolbar; // Now add toolbar to your field inputview and run
[doneToolbar sizeToFit]; // call this to auto fit to the view
- (void)doneEditAction {
[self.view endEditing:YES];
}
Ответ 12
В вашем приложении для iOS не удается найти цифровую клавиатуру, подключенную к вашей OS X. Поэтому вам просто нужно снять флажок "Подключить аппаратную клавиатуру" в симуляторе по следующему пути только для целей тестирования:
Simulator -> Hardware -> Keyboard -> Connect Hardware Keyboard
Это решит вышеуказанную проблему.
Я думаю, вы должны увидеть ссылку ниже. Это говорит об bug
в XCode
в конце этой ветки форума!
Ссылка
Ответ 13
Может быть, вы должны reset кадр кнопки, у меня тоже была проблема, и nslog вид клавиатуры вроде этого:
ios8:
"<UIInputSetContainerView: 0x7fef0364b0d0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7fef0364b1e0>>"
before8:
"<UIPeripheralHostView: 0x11393c860; frame = (0 352; 320 216); autoresizesSubviews = NO; layer = <CALayer: 0x11393ca10>>"
Ответ 14
Хорошо, вот простое исправление для кнопки "done" для показа и работы в приложении в iOS 9, iOS 8 и ниже, когда я получил аналогичную ошибку. Это можно было наблюдать после запуска приложения и просмотра его через "Просмотр иерархии" (например, щелчок по значку "Просмотр иерархии" на панели "Область отладки", когда приложение работает на устройстве и проверяет ваши взгляды в "Раскадке" ), что клавиатура представлена на различные окна в iOS 9 по сравнению с iOS 8 и ниже версий и должны быть учтены.
addButtonToKeyboard
- (id)addButtonToKeyboard
{
if (!doneButton)
{
// create custom button
UIButton * doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
doneButton.frame = CGRectMake(-2, 163, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
[doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
[doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
[doneButton addTarget:self action:@selector(saveNewLead:) forControlEvents:UIControlEventTouchUpInside];
}
NSArray *windows = [[UIApplication sharedApplication] windows];
//Check to see if running below iOS 9,then return the second window which bears the keyboard
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) {
return windows[windows.count - 2];
}
else {
UIWindow* keyboardWithDoneButtonWindow = [ windows lastObject];
return keyboardWithDoneButtonWindow;
}
}
И вот как вы могли бы removeKeyboardButton с клавиатуры, если хотите.
- (void)removeKeyboardButton {
id windowTemp = [self addButtonToKeyboard];
if (windowTemp) {
for (UIView *doneButton in [windowTemp subviews]) {
if ([doneButton isKindOfClass:[UIButton class]]) {
[doneButton setHidden:TRUE];
}
}
}
}