Il pulsante "Ignora tastiera" di iPad non elimina la tastiera
-
28-10-2019 - |
Domanda
Ho un UITextField in una vista orizzontale e quando premo il pulsante "ignora tastiera" in basso a destra nella vista UIKeyboard, la tastiera NON scompare.C'è un modo per ascoltare a livello di codice quando è stato premuto questo tasto?O c'è una connessione che non vedo che farà scomparire questa tastiera? Questo è iOS 4 e XCode 4. Grazie.
Soluzione
Ho avuto lo stesso problema oggi e mi sono chiesto, perché funziona nel codice di esempio dell'accessorio per tastiera di Apple. Quindi ho fatto il reverse engineering.Il ViewController non è stato l'errore che ho fatto nel mio caso.
Nell'implementazione di UIApplicationDelegate c'è il punto di ingresso dell'applicazione, dove root viewcontroller e window verranno impostati - (void) applicationDidFinishLaunching:(UIApplication *)application
.Se hai dimenticato di aggiungere la vista root viewcontroller alla finestra come sottoview, il pulsante ignora tastiera non funzionerebbe in nessuna vista della tua app.
@class ViewController;
@interface KeyboardAccessoryAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
ViewController *viewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ViewController *viewController;
@end
...
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}
Per favore, non dimenticare di impostare le uscite nel file xib principale.
Non so perché questo sia correlato al comportamento delle tastiere.Ma la mia teoria è che la catena del risponditore non è collegata alla finestra, ma ha bisogno.
Altri suggerimenti
Per chiudere la tastiera utilizzando il pulsante Ignora tastiera è necessario implementare il metodo delegato
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//Check if your text field is first responder, and if it is, have it resign
}
In alternativa, se desideri chiudere la tastiera toccando al di fuori di essa, utilizza
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UIView* view in self.view.subviews)
{
if ([view isKindOfClass:[UITextField class]]) {
[view resignFirstResponder];
}
if ([view isKindOfClass:[UITextView class]]) {
[view resignFirstResponder];
}
}
}
devi dire al campo di testo che accetta l'input da tastiera di non essere più il primo risponditore.
[UITextField resignFirstRepsonder];