ฉันต้องการรับชื่อผู้ใช้ กล่องโต้ตอบการป้อนข้อความอย่างง่าย วิธีง่ายๆในการทำเช่นนี้?
ฉันต้องการรับชื่อผู้ใช้ กล่องโต้ตอบการป้อนข้อความอย่างง่าย วิธีง่ายๆในการทำเช่นนี้?
คำตอบ:
ใน iOS 5 มีวิธีใหม่และง่ายในการนี้ ฉันไม่แน่ใจว่าการใช้งานจะเสร็จสมบูรณ์หรือไม่เนื่องจากยังไม่เป็นที่น่าพอใจเช่นพูด a UITableViewCell
แต่ควรทำเคล็ดลับอย่างแน่นอนเนื่องจากตอนนี้เป็นมาตรฐานที่รองรับใน iOS API แล้ว คุณไม่จำเป็นต้องมี 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];
สิ่งนี้ทำให้ alertView เช่นนี้ (ภาพหน้าจอที่นำมาจากเครื่องจำลอง iPhone 5.0 ใน XCode 4.2):
เมื่อกดปุ่มใด ๆ ระบบจะเรียกใช้เมธอดผู้ร่วมประชุมปกติและคุณสามารถแยก textInput ได้ดังนี้:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
NSLog(@"Entered: %@",[[alertView textFieldAtIndex:0] text]);
}
ที่นี่ฉันแค่ NSLog ผลลัพธ์ที่ป้อน ในโค้ดการผลิตคุณควรกำหนดตัวชี้ไปยัง alertView ของคุณเป็นตัวแปรส่วนกลางหรือใช้แท็ก alertView เพื่อตรวจสอบว่าฟังก์ชันมอบหมายถูกเรียกใช้โดยเหมาะสมหรือไม่UIAlertView
แต่สำหรับตัวอย่างนี้ก็ไม่เป็นไร
คุณควรตรวจสอบUIAlertView APIและคุณจะเห็นว่ามีการกำหนดรูปแบบเพิ่มเติม
หวังว่านี่จะช่วยได้!
- แก้ไข -
ฉันเล่นกับ alertView นิดหน่อยและฉันคิดว่ามันไม่จำเป็นต้องมีการประกาศว่ามันเป็นไปได้อย่างสมบูรณ์แบบที่จะแก้ไข textField ตามที่ต้องการ: คุณสามารถสร้างการอ้างอิงUITextField
และแก้ไขได้ตามปกติ (โดยทางโปรแกรม) การทำเช่นนี้ฉันสร้าง alertView ตามที่คุณระบุไว้ในคำถามเดิมของคุณ ดีกว่าไม่มาสายใช่ไหม :-)?
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];
สิ่งนี้ก่อให้เกิดการแจ้งเตือนนี้:
คุณสามารถใช้วิธีการมอบหมายแบบเดียวกับที่ฉันโพสต์ไว้ก่อนหน้านี้เพื่อประมวลผลผลลัพธ์จากอินพุต ฉันไม่แน่ใจว่าคุณสามารถป้องกันไม่ให้UIAlertView
ยกเลิกได้หรือไม่ (ไม่มีshouldDismiss
ฟังก์ชั่นผู้ร่วมประชุม AFAIK) ดังนั้นฉันคิดว่าหากข้อมูลของผู้ใช้ไม่ถูกต้องคุณต้องตั้งค่าการแจ้งเตือนใหม่ (หรือเพิ่งshow
นี้ ) จนกว่าอินพุตที่ถูกต้องคือ ป้อน
มีความสุข!
เพื่อให้แน่ใจว่าคุณได้รับการติดต่อกลับหลังจากผู้ใช้ป้อนข้อความให้ตั้งค่าผู้รับมอบสิทธิ์ภายในตัวจัดการการกำหนดค่า 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)
ใน 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)
}
ใน 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];
}
สำหรับ iOS 5-7:
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"INPUT BELOW" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
หมายเหตุ: ด้านล่างใช้ไม่ได้กับ iOS 7 (iOS 4 - 6 ใช้งานได้)
เพียงเพื่อเพิ่มเวอร์ชันอื่น
- (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];
}
แล้วฉันก็โทร [alert show];
เมื่อฉันต้องการ
วิธีการที่ไปพร้อมกัน
- (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:“ NSString * theMessage = [alertView textFieldAtIndex: 0] .text; `
ทดสอบข้อมูลโค้ดที่สามของ Warkst - ใช้งานได้ดียกเว้นฉันเปลี่ยนเป็นประเภทอินพุตเริ่มต้นแทนที่จะเป็นตัวเลข:
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:
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];
แค่ต้องการเพิ่มข้อมูลสำคัญที่ฉันเชื่อว่าถูกทิ้งไว้บางทีอาจเป็นเพราะสมมติฐานที่ว่าผู้ที่กำลังมองหาคำตอบอาจรู้อยู่แล้ว ปัญหานี้เกิดขึ้นมากมายและฉันก็พบว่าตัวเองติดขัดเมื่อพยายามใช้viewAlert
วิธีการสำหรับปุ่มของUIAlertView
ข้อความ ในการทำสิ่งนี้คุณต้องเพิ่มคลาส delegate ก่อนซึ่งอาจมีลักษณะดังนี้:
@interface YourViewController : UIViewController <UIAlertViewDelegate>
นอกจากนี้คุณสามารถดูบทแนะนำที่เป็นประโยชน์ได้ที่นี่ !
หวังว่านี่จะช่วยได้
ลองใช้รหัส Swift นี้ใน 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)
ฉันจะใช้UIAlertView
กับมุมมองUITextField
ย่อย คุณสามารถเพิ่มช่องข้อความด้วยตนเองหรือใน iOS 5 ให้ใช้วิธีการใหม่อย่างใดอย่างหนึ่ง
code
UIAlertView * myAlertView = [[UIAlertView จัดสรร] initWithTitle: @ "ชื่อของคุณอยู่ที่นี่" ข้อความ: @ "สิ่งนี้ได้รับการคุ้มครอง" delegate: self CancelButtonTitle: @ "ยกเลิก" otherButtonTitles: @ "OK", nil]; UITextField * myTextField = [[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]; [myAlertView แสดง]; [รุ่น myAlertView];
เพิ่มมุมมองการ UIAlertView เช่นนี้ ใน iOS 5 มี "เวทมนตร์" บางอย่างที่ทำเพื่อคุณ (แต่ทั้งหมดนี้อยู่ภายใต้ NDA)
ใน Xamarin และ 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();
สร้างตามคำตอบของ John Riselvato เพื่อดึงสตริงกลับจาก 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];