IPhoneおよびSDK用のiOS 8 Gold Masterをダウンロードしました。
私はアプリをテストしましたが、1つを除いて問題なく動作します。
ユーザーが何かを入力したい場合にテンキーが表示されるテキストフィールドがあり、さらにキーボードが表示されたときに空の領域にカスタムボタンが追加されます。
- (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];
}
}
}
}
これは今までうまく機能していました。
まず、この警告が表示されます。
キーボードiPhone-Portrait-NumberPadのタイプ4をサポートするキープレーンが見つかりません。 3876877096_Portrait_iPhone-Simple-Pad_Defaultを使用
そのカスタムボタンも表示されていません。これは、次の2行のせいだと思います。
if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
そして
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
助言がありますか?
私もこの問題を抱えていて、解決策を見つけました。
以下は、iOS 8.0および以下のバージョンでも機能するコードです。
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;
}
}
お役に立てれば。
しかし、私はまだこの警告を受け取っています:
キーボードiPhone-Portrait-NumberPadのタイプ4をサポートするキープレーンが見つかりません。 3876877096_Portrait_iPhone-Simple-Pad_Defaultを使用
この警告を無視して、私はそれを機能させました。この警告を緩和できるかどうかをお知らせください。
私も、最新のXcodeベータ版にアップデートした後、この問題を抱えていました。シミュレーターの設定が更新されるため、ラップトップ(外部)キーボードが検出されていました。単に押す場合:
iOSシミュレータ->ハードウェア->キーボード->ハードウェアキーボードの接続
エントリのチェックを外すと、ソフトウェアキーボードがもう一度表示されます。
エミュレータは、Macでテンキーを見つけようとしますが、これは見つかりません(MacBook Pro、MacBook Air、および「通常/小型」キーボードにはありません)。 [ハードウェアキーボードの接続]オプションの選択を解除するか、エラーメッセージを無視するだけで、アプリケーションに悪影響はありません。
IOS 8でxcodeを使用しているのは、[シミュレータ]-> [ハードウェア]-> [キーボード]-> [ハードウェアキーボードの接続]の[ハードウェアキーボードの接続]オプションをオフにするだけです。
これで問題が解決します。
ただ行く
iOSシミュレータ->ハードウェア->キーボード->ハードウェアキーボード接続オプションのチェックを外します。
これにより問題が修正されます。
上記の手順を実行した後、MACキーボードは機能しません。シミュレーターキーボードを使用する必要があります。
Xcode 8.1とiOS 10.1でも同じ問題が発生しました。私のために働いたのは、シミュレーター->ハードウェア->キーボードに行き、ハードウェアキーボードの接続をオフにしました。
シミュレーターを使用してアプリを実行する
iOSシミュレーター->ハードウェア->キーボード-> iOSはOS Xと同じレイアウトを使用します
誰かがデバイスでアプリを実行している場合、これは問題を解決します
[シミュレータ]-> [ハードウェア]-> [キーボード]に移動し、[ハードウェアキーボードの接続]をオフにします。
上記の多くの回答と同じBUTは、シミュレータを終了して再起動するまで変わりませんでした。 xcode 8.2.1およびシミュレーター10.0。
2つの異なる理由で同じエラーメッセージが表示されたので、デバッグチェックリストに追加できます。
コンテキスト:Xcode 6.4、iOS:8.4。カスタムUIBarButton
sのツールバーを追加して、UIKeyboardTypeNumberPad
(Swift:UIKeyboardType.numberPad
)、つまり「Done」と「+/-」をロードしました。次の場合にこの問題が発生しました。
UIToolbarはプロパティとして宣言されましたが、明示的にalloc/initするのを忘れていました。
私は最後の行[myCustomToolbar sizeToFit];
を省略しましたが、これはHoldenの答えと同じ家族のように聞こえます(ここに私のコード: https://stackoverflow.com/a/32016397/489805 )。
がんばろう
ディストリビューションプロビジョニングプロファイルを使用しても同じ問題が発生しました。開発者プロファイルを使用していることを確認してください
なぜ長いコードで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];
}
IOSアプリでは、OS Xに接続された数字キーパッドを見つけることができません。そのため、テスト目的のために、次のパスでシミュレータの[ハードウェアキーボードの接続]オプションのチェックを外すだけです。
Simulator -> Hardware -> Keyboard -> Connect Hardware Keyboard
これにより、上記の問題が解決されます。
下のリンクもご覧になると思います。フォーラム投稿スレッドの最後にある
bug
のXCode
であると書かれています!
ボタンのフレームをリセットする必要があるかもしれませんが、私もいくつかの問題を抱えていて、次のようにキーボードのビューを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>>"