无法find键盘iPhone-Portrait-NumberPad支持types4的键盘; 使用3876877096_Portrait_iPhone-Simple-Pad_Default

我已经为iPhone和SDK下载了iOS 8 Gold Master。

我testing了应用程序,它工作正常,除了一件事。

我有一个文本字段,其中如果用户想要input某些内容,则会出现一个数字键盘,另外,键盘显示时,空白区域会添加一个自定义button。

- (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]; } } } } 

到目前为止,这工作得很好。

首先,我得到这个警告:

无法find键盘iPhone-Portrait-NumberPad支持types4的键盘; 使用3876877096_Portrait_iPhone-Simple-Pad_Default

那自定义button也没有显示,我想这是因为这两行:

 if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) 

 if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) 

有什么build议么?

我也有这个问题,find了解决办法。

以下是适用于iOS 8.0以及以下版本的代码。

我已经testing了它在iOS 7和8.0(Xcode版本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; } } 

希望这可以帮助。

但是,我仍然得到这个警告:

无法find键盘iPhone-Portrait-NumberPad支持types4的键盘; 使用3876877096_Portrait_iPhone-Simple-Pad_Default

忽略这个警告我得到它的工作。 请告诉我,如果你能从这个警告中得到解脱。

更新到最新的Xcode Beta后,我也遇到了这个问题。 模拟器上的设置被刷新,所以笔记本电脑(外部)键盘被检测到。 如果你只是按下:

iOS模拟器 – >硬件 – >键盘 – >连接硬件键盘

这样该条目被UNchecked,那么软件键盘将再次显示。

模拟器试图在Mac上find一个数字键盘,但没有find(MacBook Pro,MacBook Air和“普通/小型”键盘没有它)。 您可以取消select“连接硬件键盘”选项,或者忽略错误信息,对应用程序没有负面影响。

我正在使用ios 8的xcode,只需在您的模拟器 – >硬件 – >键盘 – >连接硬件键盘中取消选中连接硬件键盘选项。

这将解决这个问题。

用这个-

转到iOS模拟器 – >硬件 – >键盘 – >取消连接硬件键盘选项。 这将解决这个问题。

我在Xcode 8.1和iOS 10.1中遇到了同样的问题。 什么为我工作是进入模拟器 – >硬件 – >键盘和取消选中连接硬件键盘。

使用模拟器运行应用程序

iOS模拟器 – >硬件 – >键盘 – > iOS使用与OS X相同的布局

这将解决这个问题,如果有人在他们的设备上运行他们的应用程序

进入模拟器 – >硬件 – >键盘,并取消选中连接硬件键盘。

与上面的许多答案一样, 但是我没有改变,直到我退出并重新启动模拟器。 xcode 8.2.1和模拟器10.0。

由于两个独立的原因,我得到了相同的错误信息,所以你可以将它们添加到你的debugging清单:

上下文:Xcode 6.4,iOS:8.4。 我正在添加一个带有自定义UIBarButton的工具栏来加载UIKeyboardTypeNumberPad (Swift: UIKeyboardType.numberPad ),即“完成”和“+/-”。 我有这个问题时:

  1. 我的UIToolbar被声明为一个属性,但我忘记明确地分配/初始化它。

  2. 我已经离开了最后一行, [myCustomToolbar sizeToFit]; ,这听起来像霍顿的答案一样(我的代码在这里: https : //stackoverflow.com/a/32016397/4898050 )。

祝你好运

我使用分发configuration文件也遇到同样的问题。 检查您是否使用开发人员资料

为什么长代码不使用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's inputview and run [doneToolbar sizeToFit]; // call this to auto fit to the view - (void)doneEditAction { [self.view endEditing:YES]; } 

也许你应该重置button的框架,我也有一些问题,并像这样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>>" 

好的,这里有一个简单的修复方法,当我得到类似的错误时,可以在iOS 9,iOS 8和更低版本的应用程序中显示和使用“完成”button。 运行应用程序并通过“查看的层次结构”查看它(例如,在应用程序在设备上运行时,在debugging区域栏中单击“查看层次结构”图标,然后在故事板中检查您的视图),可以观察到键盘出现与iOS 8及以下版本相比,iOS 9中的不同窗口必须考虑。 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; } } 

这就是你如何从键盘上移除键盘button

 - (void)removeKeyboardButton { id windowTemp = [self addButtonToKeyboard]; if (windowTemp) { for (UIView *doneButton in [windowTemp subviews]) { if ([doneButton isKindOfClass:[UIButton class]]) { [doneButton setHidden:TRUE]; } } } }