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?
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.
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.
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.
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
}
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];
Ab iOS 8 wurde UIAlertView
zugunsten von UIAlertController
veraltet, wodurch die Unterstützung für das Hinzufügen von UITextField
s mit der folgenden Methode hinzugefügt wird:
- (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField *textField))configurationHandler;
Siehe diese Antwort für ein Beispiel.
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.
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);
}
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.
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");
}
}
}