Keyplane, das Typ 4 für die Tastatur iPhone-Portrait-NumberPad unterstützt, kann nicht gefunden werden. using 3876877096_Portrait_iPhone-Simple-Pad_Default

114

Ich habe iOS 8 Gold Master für das iPhone und das SDK heruntergeladen.

Ich habe die App getestet und sie funktioniert bis auf eine Sache einwandfrei.

Ich habe ein Textfeld, in dem ein Nummernblock angezeigt wird, wenn der Benutzer etwas eingeben möchte. Außerdem wird dem leeren Bereich eine benutzerdefinierte Schaltfläche hinzugefügt, wenn die Tastatur angezeigt wird.

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

}

Das hat bis jetzt gut funktioniert.

Zunächst erhalte ich folgende Warnung:

Keyplane, das Typ 4 für die Tastatur iPhone-Portrait-NumberPad unterstützt, kann nicht gefunden werden. using 3876877096_Portrait_iPhone-Simple-Pad_Default

dann wird diese benutzerdefinierte Schaltfläche auch nicht angezeigt, was ich aufgrund dieser 2 Zeilen denke:

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

und

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

Irgendwelche Vorschläge?

CRAZYSNAKE
quelle

Antworten:

10

Ich hatte auch dieses Problem und fand die Lösung.

Unten finden Sie den Code, der für iOS 8.0 und auch für die folgenden Versionen funktioniert.

Ich habe es auf iOS 7 und 8.0 (Xcode Version 6.0.1) getestet.

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

Hoffe das hilft.

Aber ich bekomme immer noch diese Warnung:

Keyplane, das Typ 4 für die Tastatur iPhone-Portrait-NumberPad unterstützt, kann nicht gefunden werden. using 3876877096_Portrait_iPhone-Simple-Pad_Default

Ich ignorierte diese Warnung und brachte sie zum Laufen. Bitte lassen Sie mich wissen, ob Sie von dieser Warnung befreit werden können.

iGW
quelle
Hat super für mich funktioniert. Danke Kumpel.
CRAZYSNAKE
Für addDoneButton oder removeDoneButton: stackoverflow.com/questions/26031798/… Ich führe den obigen Code in XCode-5.1.1 auf den iOS-6/7/8-Geräten aus. Perfekt funktionieren.
Alishaik786
1
- (void) doneButton: (UIButton *) Absender {NSLog (@ "fdsfdsdsf"); }
SampathKumar
Ich habe all diese Aktionen ausgeführt, aber die Schaltfläche "Fertig" ist nicht anklickbar. Können Sie mich unterstützen?
SergStav
Mit der neuesten Version von iOS 8.3 und höher hat sich etwas geändert, das den zuvor veröffentlichten Code nicht erfüllt. Ich habe die Prüfung für iOS 8.3 und höher hinzugefügt. Sie funktioniert möglicherweise nicht mehr für die zukünftige iOS-Version. Bitte überprüfen Sie oben.
iGW
143

Ich hatte auch dieses Problem nach dem Update auf die neueste Xcode Beta. Die Einstellungen im Simulator werden aktualisiert, sodass die (externe) Laptop-Tastatur erkannt wurde. Wenn Sie einfach drücken:

iOS Simulator -> Hardware -> Tastatur -> Hardware-Tastatur verbinden

Damit der Eintrag deaktiviert ist, wird die Softwaretastatur erneut angezeigt.

Aquagremlin
quelle
14
Ich habe wahrscheinlich versehentlich Shift + Cmd + K gedrückt!
Eric
1
iOS Simulator -> Hardware -> Tastatur -> Hardware-Tastatur verbinden Deaktivieren Sie es und es wurde behoben
EFE
Dies überspringt nur die Prüfung, die den Fehler auslöst, wenn Sie sich in einem Simulator befinden - der Fehler- und Tastaturaustausch wird in der realen Welt auf realen Geräten weiterhin auftreten.
Zack
Wenn dies nicht funktioniert, wählen Sie Simulator -> Hardware -> Alle Inhalte und Einstellungen löschen.
Wimukthi Rajapaksha
1
Für Version 11.5; iOS Simulator -> E / A -> Tastatur -> Hardware-Tastatur verbinden
miletliyusuf
40

Der Emulator versucht, einen Ziffernblock auf dem Mac zu finden, dieser wird jedoch nicht gefunden (MacBook Pro, MacBook Air und "normale / kleine" Tastatur haben ihn nicht). Sie können die Option Hardware-Tastatur verbinden deaktivieren oder die Fehlermeldung einfach ignorieren. Dies hat keine negativen Auswirkungen auf die Anwendung.

dunkler Mann
quelle
16

Geh einfach zu

iOS Simulator -> Hardware -> Tastatur -> Deaktivieren Sie die Option Hardware-Tastatur verbinden.

Dies wird das Problem beheben.

Ihre MAC-Tastatur funktioniert nicht, nachdem Sie den obigen Schritt ausgeführt haben. Sie müssen eine Simulatortastatur verwenden.

Avinash651
quelle
12

Ich verwende xcode mit ios 8, deaktiviere einfach die Option zum Verbinden der Harware-Tastatur in deinem Simulator-> Hardware-> Tastatur-> Hardware-Tastatur verbinden.

Dies wird das Problem lösen.

user4600710
quelle
Buchstäblich keine Ahnung, wo sich dieser iOS-Simulator befindet. Oder wo ist Hardware? Sie sprechen über den eigentlichen Simulator wie das, was wie ein iPhone aussieht, und dadurch finde ich Hardware?
Thomas
7

Ich hatte das gleiche Problem in Xcode 8.1 und iOS 10.1. Was für mich funktionierte, war, in Simulator-> Hardware-> Tastatur zu gehen und das Kontrollkästchen Connect Hardware Keyboard zu deaktivieren.

Carlson
quelle
7

Gehen Sie zu Simulator-> Hardware-> Tastatur und deaktivieren Sie Connect Hardware Keyboard.

Das gleiche wie viele Antworten oben, ABER hat sich für mich nicht geändert, bis ich den Simulator beendet und neu gestartet habe. xcode 8.2.1 und Simulator 10.0.

tdw
quelle
5

Führen Sie die App mit dem Simulator aus

iOS Simulator-> Hardware-> Tastatur -> iOS verwendet das gleiche Layout wie OS X.

Dies behebt das Problem, wenn jemand da draußen seine App auf seinem Gerät ausführt

Ronaldoh1
quelle
3

Ich habe dieselbe Fehlermeldung aus zwei verschiedenen Gründen erhalten, sodass Sie sie Ihrer Debugging-Checkliste hinzufügen können:

Kontext: Xcode 6.4, iOS: 8.4. Ich habe eine Symbolleiste mit benutzerdefinierten UIBarButtons zum Laden mit UIKeyboardTypeNumberPad(Swift :) hinzugefügt UIKeyboardType.numberPad, nämlich "Fertig" und "+/-". Ich hatte dieses Problem, als:

  1. Meine UIToolbar wurde als Eigenschaft deklariert, aber ich hatte vergessen, sie explizit zuzuweisen / zu initiieren.

  2. Ich hatte die letzte Zeile weggelassen [myCustomToolbar sizeToFit];, was so klingt, als wäre es dieselbe Familie wie Holdens Antwort (mein Code hier: https://stackoverflow.com/a/32016397/4898050 ).

Viel Glück

AmitaiB
quelle
2

In Ihrer iOS-App kann kein Ziffernblock gefunden werden, der an Ihr Betriebssystem X angeschlossen ist. Sie müssen also nur die Option zum Verbinden der Hardwaretastatur in Ihrem Simulator im folgenden Pfad nur zu Testzwecken deaktivieren:

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

Dadurch wird das oben genannte Problem behoben.

Ich denke, Sie sollten auch den folgenden Link sehen. Er sagt , es ist ein bugin der XCodeam Ende dieses Forum Post Thread!

Referenz

Hitesh Surani
quelle
1

Ich hatte das gleiche Problem mit dem Verteilungsbereitstellungsprofil. Überprüfen Sie, ob Sie das Entwicklerprofil verwenden

KIO
quelle
1

Warum den langen Code und nicht die UIToolbar verwenden? da die warnung noch bestehen bleibt?

UIToolbar funktioniert für jede iOS-Version. Hier ist mein Beispielcode

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];
}
NFerocious
quelle
0

Vielleicht sollten Sie den Rahmen der Schaltfläche zurücksetzen, ich hatte auch ein Problem, und nslog die Ansicht der Tastatur wie folgt:

ios8:

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

vor 8:

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

Okay, hier ist eine einfache Lösung, um die Schaltfläche "Fertig" zum Anzeigen und Arbeiten in einer App in iOS 9, iOS 8 und darunter zu erhalten, wenn ein ähnlicher Fehler aufgetreten ist. Nach dem Ausführen einer App und dem Anzeigen über "Hierarchie der Ansicht" (dh Klicken auf das Symbol "Hierarchie anzeigen" in der Debug-Bereichsleiste, während die App auf dem Gerät ausgeführt wird und Ihre Ansichten im Storyboard überprüft) kann festgestellt werden, dass die Tastatur angezeigt wird andere Fenster in iOS 9 im Vergleich zu iOS 8 und niedrigeren Versionen und müssen berücksichtigt werden. 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;
    }
}

Und so können Sie den KeyboardButton von der Tastatur entfernen, wenn Sie möchten.

- (void)removeKeyboardButton {

id windowTemp = [self addButtonToKeyboard];

if (windowTemp) {

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