Kullanıcı adını almak istiyorum. Basit bir metin girişi iletişim kutusu. Bunu yapmanın basit bir yolu var mı?
Kullanıcı adını almak istiyorum. Basit bir metin girişi iletişim kutusu. Bunu yapmanın basit bir yolu var mı?
Yanıtlar:
İOS 5'te bunun yeni ve kolay bir yolu var. Uygulamanın henüz tam olarak tamamlanıp tamamlanmadığından emin değilim, çünkü diyelim ki a kadar zarif değil UITableViewCell
, ancak şimdi iOS API'de standart olarak desteklendiği için kesinlikle hile yapmalı. Bunun için özel bir API'ye ihtiyacınız olmayacak.
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];
Bu, şu şekilde bir alertView oluşturur (XCode 4.2'deki iPhone 5.0 simülatöründen alınan ekran görüntüsü):
Herhangi bir düğmeye bastığınızda, normal temsilci yöntemleri çağrılır ve textInput'u aşağıdaki gibi çıkarabilirsiniz:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
NSLog(@"Entered: %@",[[alertView textFieldAtIndex:0] text]);
}
Burada sadece girilen sonuçları NSLog olarak kaydediyorum. Üretim kodunda, büyük olasılıkla bir global değişken olarak alertView'unuza bir işaretçi tutmalısınız veya delege fonksiyonunun uygun tarafından çağrılıp çağrılmadığını kontrol etmek için alertView etiketini kullanmalısınız, UIAlertView
ancak bu örnek için bu tamam olmalıdır.
UIAlertView API'yi kontrol etmelisiniz ve tanımlanmış daha fazla stil olduğunu göreceksiniz.
Umarım bu yardımcı olmuştur!
-- DÜZENLE --
Biraz alertView ile oynuyordum ve textField'i istediğiniz gibi düzenlemenin mükemmel bir şekilde mümkün olduğuna dair bir duyuruya gerek olmadığını düşünüyorum: için bir referans oluşturabilir UITextField
ve onu normal şekilde düzenleyebilirsiniz (programlı olarak). Bunu yaparak, orijinal sorunuzda belirttiğiniz gibi bir alertView oluşturdum. Geç olması hiç olmamasından iyidir, değil mi :-)?
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];
Bu, şu uyarıyı üretir:
Girişten gelen sonucu işlemek için daha önce gönderdiğim temsilci yöntemini kullanabilirsiniz. Eğer önleyebilir olmadığından emin değilim UIAlertView
gerçi işten çıkarması (hayır yoktur shouldDismiss
ben kullanıcı girişi geçersiz ise, yeni bir uyarı katlanmak zorunda (ya da sadece yeniden varsayalım böylece temsilci fonksiyonu AFAIK) show
doğru giriş olana kadar bu bir) girdi.
İyi eğlenceler!
Kullanıcı metni girdikten sonra geri aramaları aldığınızdan emin olmak için, temsilciyi yapılandırma işleyicisinin içinde ayarlayın. textField.delegate = self
Swift 3 ve 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)
Swift'de (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)
}
Objective-C'de (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];
}
İOS 5-7 İÇİN:
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"INPUT BELOW" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
NOT: Aşağıdaki iOS 7 ile çalışmaz (iOS 4-6 Çalışır)
Sadece başka bir versiyon eklemek için.
- (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];
}
sonra [alert show];
istediğim zaman ararım .
Birlikte giden yöntem
- (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
textField.text değerini almak için temsilci yöntemime aşağıdakileri koymak zorunda kaldım : `NSString * theMessage = [alertView textFieldAtIndex: 0] .text;"
Warkst'ın üçüncü kod parçacığını test etti - harika çalıştı, ancak onu sayısal yerine varsayılan giriş türü olarak değiştirdim:
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];
IOS 9.0 UIAlertController'ı kullandığından beri:
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];
Belki de cevap arayanların zaten bildiği varsayımıyla dışarıda bırakıldığına inandığım önemli bir bilgi parçası eklemek istedim. Bu sorun çok oluyor ve ben de mesajın viewAlert
düğmeleri için yöntemi uygulamaya çalıştığımda kendimi sıkışmış buldum UIAlertView
. Bunu yapmak için önce aşağıdaki gibi görünebilecek delege sınıfını eklemeniz gerekir:
@interface YourViewController : UIViewController <UIAlertViewDelegate>
Ayrıca burada çok faydalı bir öğretici bulabilirsiniz !
Bu yardımcı olur umarım.
Bu Swift kodunu bir UIViewController'da deneyin -
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)
Bir alt görünümü UIAlertView
olan a UITextField
kullanırdım. Metin alanını manuel olarak ekleyebilir veya iOS 5'te yeni yöntemlerden birini kullanabilirsiniz.
code
UIAlertView * myAlertView = [[UIAlertView tahsisi] initWithTitle: @ "Başlığınız burada" mesaj: @ "bu kapsanacak" temsilci: self cancelButtonTitle: @ "İptal" otherButtonTitles: @ "Tamam", nil]; UITextField * myTextField = [[UITextField ayırma] 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 gösterisi]; [myAlertView sürümü];
Böyle bir UIAlertView manzarasına ekleyin bu . İOS 5'te bunu sizin için yapan bazı "sihirli" şeyler var (ama hepsi Gizlilik Sözleşmesi kapsamında).
Xamarin ve C # 'da:
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();
Dizeyi UIAlertView'dan geri almak için John Riselvato'nun cevabına dayanarak ...
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];