web-dev-qa-db-fra.com

Ajout de TextField à UIAlertView

J'ai besoin d'ajouter une TextField à une UIAlertView. Je comprends que Apple décourage cette approche. Donc, y a-t-il une bibliothèque que je pourrais utiliser pour ajouter un TextField à un cadre UIAlertView?

21
shajem

Pour iOS5:

UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Title" message:@"Please enter someth" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
av.alertViewStyle = UIAlertViewStylePlainTextInput;
[av textFieldAtIndex:0].delegate = self;
[av show];

De plus, vous devrez implémenter les protocoles UITextFieldDelegate, UIAlertViewDelegate.

69
Shmidt

Malheureusement, la seule API officielle pour cela est iOS 5 et supérieur, c'est une propriété appelée alertViewStyle qui peut être définie sur les paramètres suivants:

UIAlertViewStyleDefault
UIAlertViewStyleSecureTextInput
UIAlertViewStylePlainTextInput
UIAlertViewStyleLoginAndPasswordInput

UIAlertViewStylePlainTextInput étant celui que vous voulez. 

Il est fortement déconseillé de jouer avec la hiérarchie de vues décrite ci-dessus.

14
Brandon Tennant

J'utilise BlockAlertsAndActionSheets au lieu des composants Apple pour AlertViews et ActionSheets, car je préfère l'approche par blocs. Contient également une BlockTextPromptAlertView dans le source, ce qui pourrait être ce que vous voulez. Vous pouvez remplacer les images de ce contrôle pour récupérer le style Apple.

Projet sur gitgub

Tutoriel qui vous aide à démarrer

Exemple:

- (IBAction)newFolder:(id)sender {
    id selfDelegate = self;
    UITextField                 *textField;
    BlockTextPromptAlertView    *alert = [BlockTextPromptAlertView  promptWithTitle :@"New Folder"
                                                                    message         :@"Please enter the name of the new folder!"
                                                                    textField       :&textField];
    [alert setCancelButtonWithTitle:@"Cancel" block:nil];
    [alert addButtonWithTitle:@"Okay" block:^{
        [selfDelegate createFolder:textField.text];
    }];
    [alert show];
}

- (void)createFolder:(NSString*)folderName {
    // do stuff
}
6
Andy Friese

Essayez quelque chose comme ça:

UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Title"
                                                 message:@"\n\n"
                                                delegate:self
                                       cancelButtonTitle:@"Cancel"
                                       otherButtonTitles:@"Save", nil] autorelease];
CGRect rect = {12, 60, 260, 25};
UITextField *dirField = [[[UITextField alloc] initWithFrame:rect] autorelease];
dirField.backgroundColor = [UIColor whiteColor];
[dirField becomeFirstResponder];
[alert addSubview:dirField];

[alert show];
4
fannheyward

Depuis iOS 8, UIAlertView est déconseillé en faveur de UIAlertController , ce qui ajoute la prise en charge de l'ajout de UITextFields à l'aide de la méthode

- (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField *textField))configurationHandler;

Voir cette réponse pour un exemple. 

4
Ric Santos

Tu peux essayer: 

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Your title here!" message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[myTextField setBackgroundColor:[UIColor whiteColor]];
[myAlertView addSubview:testTextField];
[myAlertView show];
[myAlertView release];

Suivez ce link pour plus de détails.

3

tout d'abord Ajoutez UIAlertViewDelegate dans le fichier ViewController.h comme 

#import <UIKit/UIKit.h>

@interface UIViewController : UITableViewController<UIAlertViewDelegate>

@end

et que Ajouter ci-dessous le code où vous souhaitez alerter l'affichage,

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title"
                                            message:@"Message"
                                           delegate:self
                                  cancelButtonTitle:@"Done"
                                  otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];

et sa méthode déléguée qui retourne quelle entrée de UItextField 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"%@", [alertView textFieldAtIndex:0].text);
}
1
Vijay Rathod

refer this ... http://iosdevelopertips.com/undocumented/alert-with-textfields.htmlceci est une api privée et si vous l'utilisez pour app in appstore, elle peut être rejetée, mais c'est bien pour développement d'entreprise.

0
Ankit Srivastava

en ajoutant à la réponse de 'Shmidt', le code pour capturer le texte saisi dans UIAlertView est collé ci-dessous (merci 'Wayne Hartman' Obtenir du texte depuis UIAlertView )

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        self.userNumber = [alertView textFieldAtIndex:0].text;
        if (self.userNumber) {
            // user enetered value
            NSLog(@"self.userNumber: %@",self.userNumber);
        } else {
            NSLog(@"null");
        }

    }
}
0
tmr