Impossibile trovare un keyplane che supporti il ​​tipo 4 per la tastiera iPhone-Portrait-NumberPad; utilizzando 3876877096_Portrait_iPhone-Simple-Pad_Default


114

Ho scaricato iOS 8 Gold Master per iPhone e SDK.

Ho testato l'app e funziona bene, tranne per una cosa.

Ho un campo di testo in cui apparirà un tastierino numerico se l'utente vuole digitare qualcosa, inoltre, un pulsante personalizzato viene aggiunto all'area vuota quando viene visualizzata la tastiera.

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

}

Fino ad ora funzionava bene.

Prima di tutto, ricevo questo avviso:

Impossibile trovare un keyplane che supporti il ​​tipo 4 per la tastiera iPhone-Portrait-NumberPad; utilizzando 3876877096_Portrait_iPhone-Simple-Pad_Default

quindi anche quel pulsante personalizzato non viene visualizzato, il che penso a causa di queste 2 linee:

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

e

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

Eventuali suggerimenti?

Risposte:


10

Ho anche avuto questo problema e ho trovato la soluzione.

Di seguito è riportato il codice che funzionerà per iOS 8.0 e anche per le versioni seguenti.

L'ho testato su iOS 7 e 8.0 (Xcode versione 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;
    }
}

Spero che questo ti aiuti.

Ma ricevo ancora questo avviso:

Impossibile trovare un keyplane che supporti il ​​tipo 4 per la tastiera iPhone-Portrait-NumberPad; utilizzando 3876877096_Portrait_iPhone-Simple-Pad_Default

Ignorando questo avviso, ho funzionato. Per favore, fammi sapere se riesci a ottenere sollievo da questo avvertimento.


Ha funzionato alla grande per me. Grazie compagno.
CRAZYSNAKE

Per addDoneButton o removeDoneButton: stackoverflow.com/questions/26031798/...~~V~~singular~~1st corro il codice sopra in XCode-5.1.1 nei dispositivi iOS-6/7/8. Funziona perfettamente.
alishaik786

1
- (void) doneButton: (UIButton *) mittente {NSLog (@ "fdsfdsdsf"); }
SampathKumar

Ho fatto tutte queste azioni ma il pulsante Fine non è cliccabile, puoi aiutarmi?
SergStav

Con l'ultima versione di iOS 8.3 e versioni successive è cambiato qualcosa che non supera il codice pubblicato in precedenza. Ho aggiunto il controllo per iOS 8.3 e versioni successive, potrebbe smettere di funzionare per la futura versione di iOS. Si prega di controllare sopra.
iGW

143

Anch'io ho avuto questo problema dopo l'aggiornamento all'ultima versione beta di Xcode. Le impostazioni sul simulatore vengono aggiornate, quindi è stata rilevata la tastiera del laptop (esterna). Se premi semplicemente:

Simulatore iOS -> Hardware -> Tastiera -> Connetti tastiera hardware

in modo che la voce non sia selezionata, verrà nuovamente visualizzata la tastiera del software.


14
Probabilmente ho premuto Maiusc + Cmd + K per errore!
Eric,

1
Simulatore iOS -> Hardware -> Tastiera -> Connetti tastiera hardware deselezionala e si è risolto
EFE

Questo salta solo il controllo che genera l'errore quando sei su un simulatore: il bug e lo scambio di tastiera continueranno a verificarsi nel mondo reale su dispositivi reali.
Zack

Se questo non funziona, seleziona Simulatore -> Hardware -> Cancella tutto il contenuto e le impostazioni.
Wimukthi Rajapaksha,

1
Per la versione 11.5; iOS Simulator -> I / O -> Tastiera -> Connetti tastiera hardware
miletliyusuf

40

L'emulatore tenta di trovare un tastierino numerico sul Mac, ma questo non viene trovato (MacBook Pro, MacBook Air e la tastiera "normale / piccola" non ce l'hanno). Puoi deselezionare l'opzione Connetti tastiera hardware o semplicemente ignorare il messaggio di errore, non avrà alcun effetto negativo sull'applicazione.


16

Vai a

Simulatore iOS -> Hardware -> Tastiera -> Deseleziona l'opzione Connetti tastiera hardware.

Questo risolverà il problema.

La tua tastiera MAC non funzionerà dopo aver eseguito il passaggio precedente, devi usare la tastiera del simulatore.


12

Sto usando xcode con iOS 8, deseleziona semplicemente l'opzione di connessione della tastiera harware nel tuo simulatore-> Hardware-> Tastiera-> Connetti tastiera hardware.

Questo risolverà il problema.


Letteralmente non ho idea di dove sia questo simulatore iOS. O dov'è l'hardware? Stai parlando del simulatore reale come quello che sembra un iPhone, e attraverso quello trovo l'hardware?
Thomas,

7

Ho avuto lo stesso problema in Xcode 8.1 e iOS 10.1. Quello che ha funzionato per me era andare in Simulatore-> Hardware-> Tastiera e deselezionare Connetti tastiera hardware.


7

Vai in Simulatore-> Hardware-> Tastiera e deseleziona Connetti tastiera hardware.

La stessa di molte risposte sopra MA non è cambiata per me fino a quando non ho chiuso e riavviato il simulatore. xcode 8.2.1 e Simulator 10.0.


5

Esegui l'app utilizzando il simulatore

iOS Simulator-> Hardware-> Tastiera -> iOS utilizza lo stesso layout di OS X

Questo risolverà il problema se qualcuno là fuori sta eseguendo la propria app sul proprio dispositivo


3

Ho ricevuto lo stesso messaggio di errore per due motivi separati, quindi puoi aggiungerli alla tua lista di controllo di debug:

Contesto: Xcode 6.4, iOS: 8.4. Stavo aggiungendo una barra degli strumenti con i messaggi personalizzati UIBarButtonda caricare con UIKeyboardTypeNumberPad(Swift :) UIKeyboardType.numberPad, ovvero "Fatto" e "+/-". Ho avuto questo problema quando:

  1. Il mio UIToolbar è stato dichiarato come proprietà, ma mi ero dimenticato di allocarlo / inizializzarlo esplicitamente.

  2. Avevo lasciato l'ultima riga, [myCustomToolbar sizeToFit];che suona come se fosse la stessa famiglia della risposta di Holden (il mio codice qui: https://stackoverflow.com/a/32016397/4898050 ).

In bocca al lupo


2

Nella tua app iOS non riesci a trovare un tastierino numerico collegato al tuo OS X. Quindi devi solo deselezionare l'opzione Connetti tastiera hardware nel tuo simulatore, nel seguente percorso solo a scopo di test:

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

Questo risolverà il problema precedente.

Penso che dovresti vedere anche il link sottostante. Dice che è un bugin XCodealla fine di quel thread di post sul forum!

Riferimento


1

Ho avuto lo stesso problema utilizzando il profilo di provisioning della distribuzione. Verifica di utilizzare il profilo sviluppatore


1

Perché il codice lungo e non utilizzare UIToolbar? visto che l'avviso è ancora persistente?

UIToolbar funziona per qualsiasi versione iOS, ecco il mio codice di esempio

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

0

Forse dovresti reimpostare il frame del pulsante, anch'io ho avuto qualche problema e nslog la vista della tastiera in questo modo:

iOS 8:

"<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>>"

-1

Ok, ecco una semplice soluzione per ottenere il pulsante `` fatto '' da mostrare e lavorare in un'app sia in iOS 9, iOS 8 e versioni precedenti quando ho ricevuto un errore simile. Potrebbe essere osservato dopo aver eseguito un'app e averla visualizzata tramite "Visualizza gerarchia" (ovvero facendo clic sull'icona "Visualizza gerarchia" dalla barra dell'area di debug mentre l'app è in esecuzione sul dispositivo e ispezionando le visualizzazioni in Storyboard), la tastiera è presentata su finestre diverse in iOS 9 rispetto a iOS 8 e versioni precedenti e devono essere prese in considerazione. 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;
    }
}

Ed è così che puoi rimuovereKeyboardButton dalla tastiera se lo desideri.

- (void)removeKeyboardButton {

id windowTemp = [self addButtonToKeyboard];

if (windowTemp) {

    for (UIView *doneButton in [windowTemp subviews]) {
        if ([doneButton isKindOfClass:[UIButton class]]) {
            [doneButton setHidden:TRUE];
        }
    }
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.