2016-05-12 4 views
0

Dans mon application iOS, je crée un UIAlert et ajouter un UITextView à dynamiquement:se concentrer Programmatically sur UITextView qui est créé comme un AccessoryView

UIAlertView *tweetAlert = [[UIAlertView alloc] initWithTitle:@"Compose Tweet" 
                  message:nil 
                  delegate:self 
                cancelButtonTitle:@"Cancel" 
                otherButtonTitles:nil]; 
     tweetTextView = [UITextView new]; 
     [tweetTextView setText:[NSString stringWithFormat:@"%@ %@", [[NSUserDefaults standardUserDefaults] valueForKey:@"tweetText"], self.setShareURL]]; 

     [tweetAlert setValue:tweetTextView forKey:@"accessoryView"]; 
     [tweetAlert addButtonWithTitle:@"Tweet"]; 
     [tweetAlert show]; 
     [tweetTextView becomeFirstResponder]; // focus textview and open keyboard 

je tente de se concentrer sur le UITextView dans la dernière ligne de telle sorte que le clavier est ouvert lorsque UIAlertView apparaît. Cependant, le clavier n'apparaît pas et l'UITextView n'est pas au point.

J'ai aussi essayé

[[tweetAlert valueForKey:@"accessoryView"] becomeFirstResponder]; 

Mais je reçois l'erreur

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIAlertView 0x1358b3200> valueForUndefinedKey:]: this class is not key value coding-compliant for the key accessoryView.' 

Toute idée de se concentrer sur le UITextView, qui est intégré dans un accessoryView dans un UIAlertView créé dynamiquement?

+0

1) 'UIAlertView' a été dépréciée depuis iOS 8. Donc, vous devriez utiliser' UIAlertController'. 2) Ni UIAlertView ni UIAlertController ne sont conçus pour ajouter des contrôles personnalisés. Vous devriez créer ou trouver un contrôle personnalisé qui supporte un 'UITextView'. 3) Quel est ce 'accessoireView 'que vous essayez d'utiliser? Il n'y a rien de tel dans 'UIAlertView'. Peut-être que vous pensez à 'UITableViewCell'. – rmaddy

Répondre

1

Vous pouvez utiliser la méthode UIAlertViewDelegate- (void)didPresentAlertView:(UIAlertView *)alertView pour faire le textview devenir le premier répondeur.

- (void)didPresentAlertView:(UIAlertView *)alertView { 
    [tweetTextView becomeFirstResponder]; 
} 
+0

Merci, cela a fonctionné! – scientiffic

1

Il est généralement déconseillé de modifier la hiérarchie des vues d'alerte. Vous devez simplement utiliser une entrée de texte UIAlertView:

UIAlertView *tweetAlert = [[UIAlertView alloc] initWithTitle:@"Compose Tweet" 
                  message:nil 
                  delegate:self 
                cancelButtonTitle:@"Cancel" 
                otherButtonTitles:nil]; 
tweetAlert.alertViewStyle = UIAlertViewStylePlainTextInput; 
+0

J'ai choisi de ne pas le faire parce que j'avais besoin de texte multiligne – scientiffic