Ich möchte den Benutzernamen erhalten. Ein einfaches Dialogfeld zur Texteingabe. Irgendeine einfache Möglichkeit, dies zu tun?
Ich möchte den Benutzernamen erhalten. Ein einfaches Dialogfeld zur Texteingabe. Irgendeine einfache Möglichkeit, dies zu tun?
Antworten:
In iOS 5 gibt es einen neuen und einfachen Weg dazu. Ich bin mir nicht sicher, ob die Implementierung vollständig abgeschlossen ist, da sie nicht UITableViewCell
so freundlich ist wie beispielsweise a , aber sie sollte definitiv den Trick machen, da sie jetzt standardmäßig in der iOS-API unterstützt wird. Sie benötigen hierfür keine private API.
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"This is an example alert!" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
[alert release];
Dadurch wird eine alertView wie folgt dargestellt (Screenshot aus dem iPhone 5.0-Simulator in XCode 4.2):
Wenn Sie eine beliebige Taste drücken, werden die regulären Delegate-Methoden aufgerufen und Sie können den textInput dort wie folgt extrahieren:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
NSLog(@"Entered: %@",[[alertView textFieldAtIndex:0] text]);
}
Hier habe ich nur die eingegebenen Ergebnisse NSLog. Im Produktionscode sollten Sie wahrscheinlich einen Zeiger auf Ihre alertView als globale Variable behalten oder das alertView-Tag verwenden, um zu überprüfen, ob die Delegatenfunktion von der entsprechenden Person aufgerufen wurde. In UIAlertView
diesem Beispiel sollte dies jedoch in Ordnung sein.
Sie sollten die UIAlertView-API überprüfen und feststellen, dass weitere Stile definiert sind.
Hoffe das hat geholfen!
- BEARBEITEN -
Ich habe ein wenig mit dem alertView herumgespielt und ich nehme an, es bedarf keiner Ankündigung, dass es durchaus möglich ist, das textField wie gewünscht zu bearbeiten: Sie können einen Verweis auf das erstellen UITextField
und es wie gewohnt (programmgesteuert) bearbeiten. Dabei habe ich eine alertView erstellt, wie Sie in Ihrer ursprünglichen Frage angegeben haben. Besser spät als nie, oder :-)?
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Hello!" message:@"Please enter your name:" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField * alertTextField = [alert textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeNumberPad;
alertTextField.placeholder = @"Enter your name";
[alert show];
[alert release];
Dies erzeugt diese Warnung:
Sie können dieselbe Delegate-Methode wie im vorherigen Poster verwenden, um das Ergebnis aus der Eingabe zu verarbeiten. Ich bin mir nicht sicher, ob Sie verhindern können, dass der Benutzer UIAlertView
entlassen wird (es gibt keine shouldDismiss
Delegierungsfunktion AFAIK). Wenn also die Benutzereingabe ungültig ist, müssen Sie eine neue Warnung (oder nur show
diese) eingeben, bis die richtige Eingabe erfolgt ist trat ein.
Habe Spaß!
Um sicherzustellen, dass Sie die Rückrufe erhalten, nachdem der Benutzer Text eingegeben hat, legen Sie den Delegaten im Konfigurationshandler fest. textField.delegate = self
Swift 3 & 4 (iOS 10 - 11):
let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
alert.addTextField(configurationHandler: {(textField: UITextField!) in
textField.placeholder = "Enter text:"
textField.isSecureTextEntry = true // for password input
})
self.present(alert, animated: true, completion: nil)
In Swift (iOS 8-10):
override func viewDidAppear(animated: Bool) {
var alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil))
alert.addTextFieldWithConfigurationHandler({(textField: UITextField!) in
textField.placeholder = "Enter text:"
textField.secureTextEntry = true
})
self.presentViewController(alert, animated: true, completion: nil)
}
In Objective-C (iOS 8):
- (void) viewDidLoad
{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Alert" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"Click" style:UIAlertActionStyleDefault handler:nil]];
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"Enter text:";
textField.secureTextEntry = YES;
}];
[self presentViewController:alert animated:YES completion:nil];
}
FÜR iOS 5-7:
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"INPUT BELOW" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
HINWEIS: Unten funktioniert nicht mit iOS 7 (iOS 4 - 6 funktioniert)
Nur um eine weitere Version hinzuzufügen.
- (void)viewDidLoad{
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Preset Saving..." message:@"Describe the Preset\n\n\n" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
UITextField *textField = [[UITextField alloc] init];
[textField setBackgroundColor:[UIColor whiteColor]];
textField.delegate = self;
textField.borderStyle = UITextBorderStyleLine;
textField.frame = CGRectMake(15, 75, 255, 30);
textField.placeholder = @"Preset Name";
textField.keyboardAppearance = UIKeyboardAppearanceAlert;
[textField becomeFirstResponder];
[alert addSubview:textField];
}
dann rufe ich an, [alert show];
wenn ich es will.
Die Methode, die mitgeht
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString* detailString = textField.text;
NSLog(@"String is: %@", detailString); //Put it on the debugger
if ([textField.text length] <= 0 || buttonIndex == 0){
return; //If cancel or 0 length string the string doesn't matter
}
if (buttonIndex == 1) {
...
}
}
alertView:(UIAlertView *) clickedButtonAtIndex:(NSInteger)buttonIndex
Delegatmethode einfügen musste, um den Wert von textField.text abzurufen: `NSString * theMessage = [alertView textFieldAtIndex: 0] .text;`
Das dritte Code-Snippet von Warkst getestet - hat hervorragend funktioniert, außer dass ich es als Standardeingabetyp anstelle von numerisch geändert habe:
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Hello!" message:@"Please enter your name:" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField * alertTextField = [alert textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeDefault;
alertTextField.placeholder = @"Enter your name";
[alert show];
Verwenden Sie seit IOS 9.0 UIAlertController:
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"My Alert"
message:@"This is an alert."
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
//use alert.textFields[0].text
}];
UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
//cancel action
}];
[alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
// A block for configuring the text field prior to displaying the alert
}];
[alert addAction:defaultAction];
[alert addAction:cancelAction];
[self presentViewController:alert animated:YES completion:nil];
Ich wollte nur eine wichtige Information hinzufügen, von der ich glaube, dass sie weggelassen wurde, vielleicht mit der Annahme, dass diejenigen, die nach Antworten suchen, es vielleicht bereits wissen. Dieses Problem tritt häufig auf und auch ich steckte fest, als ich versuchte, die viewAlert
Methode für die Schaltflächen der UIAlertView
Nachricht zu implementieren . Dazu müssen Sie zuerst die Delegatenklasse hinzufügen, die ungefähr so aussieht:
@interface YourViewController : UIViewController <UIAlertViewDelegate>
Sie können auch ein sehr hilfreich Tutorial hier !
Hoffe das hilft.
Versuchen Sie diesen Swift-Code in einem UIViewController -
func doAlertControllerDemo() {
var inputTextField: UITextField?;
let passwordPrompt = UIAlertController(title: "Enter Password", message: "You have selected to enter your passwod.", preferredStyle: UIAlertControllerStyle.Alert);
passwordPrompt.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: { (action) -> Void in
// Now do whatever you want with inputTextField (remember to unwrap the optional)
let entryStr : String = (inputTextField?.text)! ;
print("BOOM! I received '\(entryStr)'");
self.doAlertViewDemo(); //do again!
}));
passwordPrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: { (action) -> Void in
print("done");
}));
passwordPrompt.addTextFieldWithConfigurationHandler({(textField: UITextField!) in
textField.placeholder = "Password"
textField.secureTextEntry = false /* true here for pswd entry */
inputTextField = textField
});
self.presentViewController(passwordPrompt, animated: true, completion: nil);
return;
}
Swift 3:
let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
alert.addTextField(configurationHandler: {(textField: UITextField!) in
textField.placeholder = "Enter text:"
})
self.present(alert, animated: true, completion: nil)
Ich würde ein UIAlertView
mit einer UITextField
Unteransicht verwenden. Sie können das Textfeld entweder manuell hinzufügen oder in iOS 5 eine der neuen Methoden verwenden.
code
UIAlertView * myAlertView = [[UIAlertView alloc] initWithTitle: @ Nachricht "Ihr Titel hier": @ "dies wird behandelt" delegate: self cancelButtonTitle: @ "Cancel" otherButtonTitles: @ "OK", nil]; UITextField * myTextField = [[UITextField-Zuweisung] initWithFrame: CGRectMake (12.0, 45.0, 260.0, 25.0)]; CGAffineTransform myTransform = CGAffineTransformMakeTranslation (0.0, 130.0); [myAlertView setTransform: myTransform]; [myTextField setBackgroundColor: [UIColor whiteColor]]; [myAlertView addSubview: myTextField]; [myAlertView show]; [myAlertView-Version];
In Blick auf eine UIAlertView wie diese . In iOS 5 gibt es einige "magische" Dinge, die dies für Sie tun (aber das ist alles unter NDA).
In Xamarin und C #:
var alert = new UIAlertView ("Your title", "Your description", null, "Cancel", new [] {"OK"});
alert.AlertViewStyle = UIAlertViewStyle.PlainTextInput;
alert.Clicked += (s, b) => {
var title = alert.ButtonTitle(b.ButtonIndex);
if (title == "OK") {
var text = alert.GetTextField(0).Text;
...
}
};
alert.Show();
Aufbauend auf John Riselvatos Antwort, um den String aus dem UIAlertView zurückzurufen ...
alert.addAction(UIAlertAction(title: "Submit", style: UIAlertAction.Style.default) { (action : UIAlertAction) in
guard let message = alert.textFields?.first?.text else {
return
}
// Text Field Response Handling Here
})
UIAlertview *alt = [[UIAlertView alloc]initWithTitle:@"\n\n\n" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
UILabel *lbl1 = [[UILabel alloc]initWithFrame:CGRectMake(25,17, 100, 30)];
lbl1.text=@"User Name";
UILabel *lbl2 = [[UILabel alloc]initWithFrame:CGRectMake(25, 60, 80, 30)];
lbl2.text = @"Password";
UITextField *username=[[UITextField alloc]initWithFrame:CGRectMake(130, 17, 130, 30)];
UITextField *password=[[UITextField alloc]initWithFrame:CGRectMake(130, 60, 130, 30)];
lbl1.textColor = [UIColor whiteColor];
lbl2.textColor = [UIColor whiteColor];
[lbl1 setBackgroundColor:[UIColor clearColor]];
[lbl2 setBackgroundColor:[UIColor clearColor]];
username.borderStyle = UITextBorderStyleRoundedRect;
password.borderStyle = UITextBorderStyleRoundedRect;
[alt addSubview:lbl1];
[alt addSubview:lbl2];
[alt addSubview:username];
[alt addSubview:password];
[alt show];