Saya ingin mendapatkan nama pengguna. Kotak dialog input teks sederhana. Adakah cara sederhana untuk melakukan ini?
Saya ingin mendapatkan nama pengguna. Kotak dialog input teks sederhana. Adakah cara sederhana untuk melakukan ini?
Jawaban:
Di iOS 5 ada cara baru dan mudah untuk ini. Saya tidak yakin apakah implementasinya sepenuhnya lengkap karena ini tidak ramah seperti, katakanlah UITableViewCell
, tetapi pasti harus melakukan trik karena sekarang standar didukung di API iOS. Anda tidak perlu API pribadi untuk ini.
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];
Ini menjadikan lansiran seperti ini (tangkapan layar diambil dari simulator iPhone 5.0 di XCode 4.2):
Saat menekan tombol apa saja, metode delegasi biasa akan dipanggil dan Anda dapat mengekstrak textInput di sana seperti:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
NSLog(@"Entered: %@",[[alertView textFieldAtIndex:0] text]);
}
Di sini saya hanya NSLog hasil yang dimasukkan. Dalam kode produksi, Anda mungkin harus menyimpan pointer ke alertView Anda sebagai variabel global atau menggunakan tag alertView untuk memeriksa apakah fungsi delegasi dipanggil oleh yang sesuai UIAlertView
tetapi untuk contoh ini ini harus baik-baik saja.
Anda harus memeriksa API UIAlertView dan Anda akan melihat ada lebih banyak gaya yang ditentukan.
Semoga ini bisa membantu!
- EDIT -
Saya bermain-main dengan alertView sedikit dan saya kira tidak perlu pengumuman bahwa sangat mungkin untuk mengedit TextField seperti yang diinginkan: Anda dapat membuat referensi ke UITextField
dan mengeditnya seperti biasa (secara terprogram). Melakukan ini, saya membuat sebuah alertView seperti yang Anda tentukan dalam pertanyaan awal Anda. Lebih baik terlambat daripada tidak, kan :-)?
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];
Ini menghasilkan lansiran ini:
Anda dapat menggunakan metode delegasi yang sama seperti yang saya poster sebelumnya untuk memproses hasil dari input. Saya tidak yakin apakah Anda dapat mencegah UIAlertView
pemberhentian meskipun (tidak ada shouldDismiss
fungsi delegasi AFAIK) jadi saya kira jika input pengguna tidak valid, Anda harus memasang peringatan baru (atau hanya kembalishow
ini) sampai input yang benar adalah dimasukkan.
Selamat bersenang-senang!
Untuk memastikan Anda mendapatkan panggilan balik setelah pengguna memasukkan teks, setel delegasi di dalam handler konfigurasi. 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)
}
Di 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];
}
UNTUK iOS 5-7:
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"INPUT BELOW" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
CATATAN: Di bawah ini tidak berfungsi dengan iOS 7 (iOS 4 - 6 Works)
Hanya untuk menambah versi lain.
- (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];
}
maka saya menelepon [alert show];
ketika saya menginginkannya.
Metode yang berlaku
- (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
metode delegasi saya untuk mengambil nilai dari textField.text: `NSString * theMessage = [alertView textFieldAtIndex: 0] .text;`
Menguji cuplikan kode ketiga Warkst - bekerja dengan sangat baik, kecuali saya mengubahnya menjadi tipe input default alih-alih numerik:
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];
Sejak iOS 9.0 gunakan 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];
Hanya ingin menambahkan sepotong informasi penting yang saya yakin ditinggalkan dengan asumsi bahwa orang yang mencari jawaban mungkin sudah tahu. Masalah ini sering terjadi dan saya menemukan diri saya mandek ketika saya mencoba menerapkan viewAlert
metode untuk tombol-tombol UIAlertView
pesan. Untuk melakukan ini, Anda perlu menambahkan 1 kelas delegasi yang mungkin terlihat seperti ini:
@interface YourViewController : UIViewController <UIAlertViewDelegate>
Anda juga dapat menemukan tutorial yang sangat membantu di sini !
Semoga ini membantu.
Coba kode Swift ini dalam 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)
Saya akan menggunakan UIAlertView
dengan UITextField
subview. Anda dapat menambahkan bidang teks secara manual atau, di iOS 5, menggunakan salah satu metode baru.
code
UIAlertView * myAlertView = [[Alokasi UIAlertView] initWithTitle: @ "Pesan Anda di sini" pesan: @ "ini akan ditanggung" delegasi: self cancelButtonTitle: @ "Batalkan" otherButtonTitles: @ "OK", nil]; UITextField * myTextField = [[Alokasi UITextField] 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]; [acara myAlertView]; [rilis myAlertView];
Tambahkan tampilan ke UIAlertView seperti ini . Di iOS 5 ada beberapa hal "ajaib" yang melakukannya untuk Anda (tapi itu semua di bawah NDA).
Dalam Xamarin dan 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();
Membangun jawaban John Riselvato, untuk mengambil kembali string dari UIAlertView ...
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];