无法找到支持键盘类型4的键盘,使用3876877096_Portrait_iPhone-Simple-Pad_Default

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

我测试了这个应用程序,它运行良好,除了一件事。

我有一个文本字段,如果用户想要输入一些东西,一个数字板将出现,此外,一个自定义按钮被添加到空白区域时,键盘显示。

- (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的键盘 使用 3876877096 _ Portrait _ iPhone-Simple-Pad _ Default 3876877096 _ Portrait _ iPhone-Simple-Pad _ Default

然后那个自定义按钮也没有显示,我想是因为这两行:

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

还有

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

有什么建议吗?

143490 次浏览

也许你应该重置按钮的框架,我也有一些问题,和 nslog 的视图键盘像这样:

Ios8:

"<UIInputSetContainerView: 0x7fef0364b0d0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7fef0364b1e0>>"

在8日前:

"<UIPeripheralHostView: 0x11393c860; frame = (0 352; 320 216); autoresizesSubviews = NO; layer = <CALayer: 0x11393ca10>>"

在升级到最新的 Xcode Beta 之后,我也遇到了这个问题。模拟器上的设置被刷新,因此检测到了膝上型电脑(外部)键盘。如果你按下:

IOS 模拟器-> 硬件-> 键盘-> 连接硬件键盘

因此,条目是未选中,然后软件键盘将再次显示。

我也有这个问题,并找到了解决办法。

下面是适用于 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的键盘,使用3876877096 _ Portrait _ iPhone-Simple-Pad _ Default

无视这个警告,我把它修好了。 如果你能从这个警告中解脱,请告诉我。

我在使用分发供应配置文件时遇到了同样的问题。请检查您是否使用了开发人员配置文件

使用模拟器运行应用程序

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

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

我在 ios 8中使用 xcode,只要在你的模拟器-> 硬件-> 键盘-> 连接硬件键盘中取消连接硬件键盘选项。

这样问题就解决了。

为什么长代码而不使用 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];
}

出于两个不同的原因,我得到了相同的错误消息,因此您可以将它们添加到调试检查表中:

背景: Xcode 6.4,iOS 8.4。我添加了一个带有定制 UIBarButton的工具栏,用 UIKeyboardTypeNumberPad(Swift: UIKeyboardType.numberPad)加载,即“完成”和“ +/-”。我遇到这个问题的时候:

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

  2. 我忘记了最后一行,[myCustomToolbar sizeToFit];,听起来好像和 Holden 的答案一样(我的代码是 https://stackoverflow.com/a/32016397/4898050)。

祝你好运

去吧

IOS 模拟器-> 硬件-> 键盘-> 取消选中连接硬件键盘选项。

这将解决问题。

执行上述步骤后,您的 MAC 键盘将无法工作,您必须使用模拟器键盘。

模拟器试图在 Mac 上找到一个数字键盘,但是找不到(MacBook Pro、 MacBook Air 和“正常/小”键盘都没有)。您可以取消选择连接硬件键盘或只是忽略错误消息,它将不会对应用程序有任何负面影响。

好了,这里有一个简单的修复“完成”按钮显示和工作在一个应用程序在 iOS9,iOS8和以下时,我得到了类似的错误。在运行一个应用程序并通过“查看层次结构”(即点击 Debug Area 栏上的“查看层次结构”图标,同时应用程序在 装置上运行并在 Storyboard 中检查您的视图)后,可以观察到,与 ios8及以下版本相比,ios9的不同窗口上显示的键盘必须加以考虑。 键盘

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

这就是如何你可以从键盘 移除键盘按钮,如果你想要的。

- (void)removeKeyboardButton {


id windowTemp = [self addButtonToKeyboard];


if (windowTemp) {


for (UIView *doneButton in [windowTemp subviews]) {
if ([doneButton isKindOfClass:[UIButton class]]) {
[doneButton setHidden:TRUE];
}
}
}
}

我在 Xcode 8.1和 ios10.1也遇到了同样的问题。对我有效的是进入模拟器-> 硬件-> 键盘和取消选中连接硬件键盘。

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

同样的许多答案以上的 但是没有为我改变,直到我退出,并重新启动模拟器。Xcode 8.2.1和 Simulator 10.0。

在你的 iOS 应用程序无法找到一个数字键盘连接到你的 OS X。所以你只需要取消选中连接硬件键盘选项在您的模拟器,在下面的路径只是为了测试目的:

Simulator -> Hardware -> Keyboard -> Connect Hardware Keyboard

这将解决上述问题。

我认为你应该看到下面的链接。它说,这是一个 bugXCode在论坛帖子的最后!

参考文献

我和弗拉特之间有点问题, 当我单击输入时,键盘不会出现,我通过将其中的 Form 小部件升级到 stateFull 来修复它。

但警告依然存在。