2014-09-24 13 views
11

Stavo sperimentando come una tastiera personalizzata influisce sulla mia app. Ho installato Swype sul mio iPhone 6.Impedisci tastiera personalizzata nel campo di testo

Trovo che in alcune delle mie viste in cui ho impostato la proprietà inputView personalizzata su un campo di testo, la tastiera Swype sta eseguendo l'override e la presentazione al posto del mio selettore. Questo interrompe completamente l'interfaccia utente e non può essere consentito.

C'è un modo per dire esplicitamente a iOS 8 solo di utilizzare l'inputView che ho impostato?

È un errore, forse? Non è previsto un comportamento per consentire a una terza parte di ignorare la mia specifica di input?

+0

Sto affrontando il problema esatto con la mia app. Ho provato più tastiere personalizzate ma il problema è lo stesso ovunque. Hai qualche successo? – Tariq

risposta

2

Utilizzando la risposta di Pablo Ezequiel Romero come punto di partenza, sono riuscito a far funzionare le cose per me. In sostanza, anziché utilizzare UIViewController per la tastiera personalizzata, utilizzare uno UIInputViewController e inserire i controlli all'interno dello inputView dello UIInputViewController. Quindi assegnare lo inputView del numero UITextField o UITextView allo inputView dello UIInputViewController.

Se si utilizza il layout automatico, è necessario assicurarsi di impostare tutto correttamente e assicurarsi di impostare un limite di altezza iniziale su inputView e impostarne la priorità al di sotto del livello massimo 999 (ho utilizzato 800). Qualsiasi altezza farà; il sistema sostituirà il vincolo con uno dei suoi. La priorità più bassa evita i conflitti di layout automatico. (Per me, se non includessi questo vincolo, la vista finale non avrebbe alcuna altezza.)

Quando ho fatto tutto questo, sono stato in grado di entrare e uscire dal mio (interno al app) tastiera personalizzata e qualsiasi estensione per tastiera di terze parti.

6

È possibile disabilitare la tastiera personalizzata per la tua app con il seguente codice:

includere questo nella vostra applicazione delegato:

- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier { 
    if ([extensionPointIdentifier isEqualToString: UIApplicationKeyboardExtensionPointIdentifier]) { 
     return NO; 
    } 
    return YES; 
} 
+0

Grazie. È buono a sapersi e potenzialmente una soluzione. Però un po 'pesante. Gli utenti potrebbero essere frustrati nel trovare la tastiera preferita mancante nella mia app. Non c'è motivo per cui le tastiere personalizzate non possano essere utilizzate in molti casi, solo dove ho fornito un inputView dedicato è un problema. –

+0

Mi sono imbattuto in questo problema me stesso e questa era la correzione quicnk. Il mio problema principale è con una vista di accesso, in cui le tastiere personalizzate non sono autorizzati a impostare le password, quindi il campo di testo della password non mostra mai la tastiera quando l'utente preme "successivo" dal campo del nome utente. (quindi se si dispone anche di un campo di testo di accesso o di testo protetto, testarlo con swype per vedere che non si interrompe anche l'interfaccia utente) – eertl

+0

@eertl: Ho un altro problema. So che saremo in grado di disabilitare le tastiere iOS 8 personalizzate usando lo snippet di codice sopra. Il punto importante qui è che abbiamo bisogno di usare Xcode-6/iOS 8 SDK per usare quanto sopra. Sono ancora su Xcode 5 a causa di alcune altre limitazioni. C'è un modo per impedire le tastiere di terze parti che utilizzano iOS 7 SDK/Xcode 5? Per favore aiuto. –

1

Ho avuto un problema simile e sono stato in grado di risolvere il problema utilizzando UIInputViewController. Fondamentalmente la vista che ho impostato in inputView è la vista della mia sottoclasse UIInputViewController. Stavo usando UIViewController, ma dopo aver sostituito il controller di visualizzazione di base ha iniziato a funzionare bene.

+0

Pablo, non ho mai risolto completamente questo problema. Può essere un po 'più chiaro Non capisco, precisamente, quello che hai fatto. –