webentwicklung-frage-antwort-db.com.de

Hinzufügen von TextField zu UIAlertView

Ich muss eine TextField zu einer UIAlertView hinzufügen. Ich verstehe, dass Apple diesen Ansatz entmutigt. Gibt es eine Bibliothek, aus der ich eine TextField zu einem UIAlertView-ähnlichen Rahmen hinzufügen könnte?

21
shajem

Für 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];

Außerdem müssen Sie die Protokolle UITextFieldDelegate, UIAlertViewDelegate implementieren.

69
Shmidt

Leider ist die einzige offizielle API für iOS 5 und höher die Eigenschaft alertViewStyle, die auf die folgenden Parameter festgelegt werden kann:

UIAlertViewStyleDefault
UIAlertViewStyleSecureTextInput
UIAlertViewStylePlainTextInput
UIAlertViewStyleLoginAndPasswordInput

UIAlertViewStylePlainTextInput ist der, den Sie wollen. 

Von der Ansichtshierarchie, wie oben beschrieben, zu urteilen, wird von Apple dringend empfohlen.

14
Brandon Tennant

Ich benutze BlockAlertsAndActionSheets anstelle der Apple-Komponenten für AlertViews und ActionSheets, da ich den Block-Ansatz vorziehen. Enthält außerdem eine BlockTextPromptAlertView in der Quelle, die Sie möglicherweise benötigen. Sie können die Bilder dieses Steuerelements ersetzen, um den Apple-Stil wieder herzustellen.

Projekt zu gitgub

Tutorial zum Einstieg

Beispiel:

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

Versuchen Sie etwas so:

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

Ab iOS 8 wurde UIAlertView zugunsten von UIAlertController veraltet, wodurch die Unterstützung für das Hinzufügen von UITextFields mit der folgenden Methode hinzugefügt wird:

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

Siehe diese Antwort für ein Beispiel. 

4
Ric Santos

Du kannst es versuchen: 

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

Folgen Sie diesem link für Details.

3

als erstes fügen Sie UIAlertViewDelegate zu ViewController.h hinzu 

#import <UIKit/UIKit.h>

@interface UIViewController : UITableViewController<UIAlertViewDelegate>

@end

und als folgenden Code hinzufügen, bei dem die Anzeige angezeigt werden soll,

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

und ihre Delegatenmethode gibt die Eingabe von UItextField zurück 

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

verweisen Sie auf diese ... http://iosdevelopertips.com/undocumented/alert-with-textfields.htmlDies ist eine private API, und wenn Sie sie für eine App im Appstore verwenden, wird sie möglicherweise abgelehnt Unternehmensentwicklung.

0

zur Antwort von 'Shmidt' wird der Code zum Erfassen von in UIAlertView eingegebenem Text unten eingefügt (Danke 'Wayne Hartman' Abrufen von Text aus 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