কোনও আইফোনে একটি পাঠ্য ইনপুট পপআপ ডায়ালগ বক্স পাওয়ার সহজ উপায় কী


125

আমি ব্যবহারকারীর নাম পেতে চাই একটি সাধারণ পাঠ্য ইনপুট ডায়ালগ বাক্স। এটি করার কোনও সহজ উপায়?


1
কয়েক সেপ্টেম্বর অবধি কয়েক মাস অপেক্ষা করুন, এবং আপনার জীবন অনেক সহজ হবে।
জোনাথন

উত্তর:


264

আইওএস 5 এ এখানে একটি নতুন এবং সহজ উপায় রয়েছে is আমি নিশ্চিত নই যে বাস্তবায়ন এখনও সম্পূর্ণরূপে সম্পূর্ণ হয়েছে কারণ এটি বলার মতো করুণাময় নয় UITableViewCellতবে এটি অবশ্যই কৌশলটি করা উচিত কারণ এটি এখন আইওএস এপিআই-তে সমর্থনযোগ্য standard এর জন্য আপনার কোনও ব্যক্তিগত API দরকার হবে না not

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];

এটি এর মতো একটি সতর্কতা ভিউ রেন্ডার করে (XCode 4.2 এ আইফোন 5.0 সিমুলেটর থেকে নেওয়া স্ক্রিনশট):

অ্যালার্টের সাথে উদাহরণ সতর্কতা

কোনও বোতাম টিপে যখন, নিয়মিত প্রতিনিধি পদ্ধতিগুলি কল করা হবে এবং আপনি সেখানে পাঠ্য ইনপুটটি এখান থেকে বের করতে পারেন:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    NSLog(@"Entered: %@",[[alertView textFieldAtIndex:0] text]);
}

এখানে আমি সন্নিবেশিত ফলাফলগুলি কেবল এনএসলগ করছি। প্রোডাকশন কোডে আপনার সম্ভবত আপনার অ্যালার্টভিউতে একটি বৈশ্বিক পরিবর্তনশীল হিসাবে একটি পয়েন্টার রাখা উচিত বা ডেলিগেট ফাংশনটি উপযুক্ত দ্বারা ডাকা হয়েছিল কিনা তা পরীক্ষা করতে সতর্কতা ভিউ ট্যাগ ব্যবহার করা UIAlertViewউচিত তবে উদাহরণ হিসাবে এটি ঠিক করা উচিত।

আপনার ইউআইএলআর্টভিউ এপিআই চেক করা উচিত এবং আপনি আরও কিছু স্টাইল সংজ্ঞায়িত দেখতে পাবেন।

আশা করি এটি সাহায্য করেছে!

- সম্পাদনা -

আমি সতর্কতার সাথে ঘুরে বেড়াচ্ছিলাম কিছুটা দেখুন এবং আমি মনে করি যে এটির কোনও ঘোষণার দরকার নেই যে এটি পছন্দ মতো টেক্সটফিল্ড সম্পাদনা করা পুরোপুরি সম্ভব: আপনি একটি রেফারেন্স তৈরি করতে পারেন UITextFieldএবং এটিকে স্বাভাবিক হিসাবে (প্রোগ্রামগতভাবে) সম্পাদনা করতে পারেন। এটি করার ফলে আমি আপনার মূল প্রশ্নটিতে নির্দিষ্ট করে দিয়েছি একটি সতর্কতাউইউ তৈরি করেছি। কখনও বেশী ভালো দেরী, ডান :-)?

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আফ্রিকান কোনও প্রতিনিধি ফাংশন নেই ) সুতরাং আমি মনে করি যদি ব্যবহারকারী ইনপুটটি অবৈধ হয়, showসঠিক ইনপুট না হওয়া পর্যন্ত আপনাকে নতুন সতর্কতা অবলম্বন করতে হবে (বা কেবল এটি পুনরায় ) প্রবেশ করানো হয়েছে।

আনন্দ কর!


1
স্বয়ংক্রিয় রেফারেন্স গণনা সহ, আপনি নিজেকে আর অবজেক্টগুলি ধরে রাখতে এবং ছেড়ে দেওয়ার কথা ভাবেন না।
ওয়াকলেহ

5
আমি জানি, তবে এই উত্তরটি ২০১১ সালে লেখা হয়েছিল।
ওয়ার্কস্ট

3
আইওএস 9.0 থেকে পদ্ধতিটি অবচয় করা হয়েছে। পরিবর্তে ইউআইএলার্টকন্ট্রোলার ব্যবহার করুন:
এখার্ডএন

: আপনি সুইফট 4 সমর্থন খুঁজছেন stackoverflow.com/a/10689318/525576
জন Riselvato

186

ব্যবহারকারী পাঠ্যে প্রবেশ করার পরে আপনি কল ব্যাক পেয়েছেন তা নিশ্চিত করতে কনফিগারেশন হ্যান্ডলারের ভিতরে ডেলিগেট সেট করুন। textField.delegate = self

সুইফট 3 এবং 4 (আইওএস 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)

সুইফটে (আইওএস 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)
}

উদ্দেশ্য-সি (আইওএস 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];
}

আইওএস 5-7 জন্য:

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"INPUT BELOW" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];

এখানে চিত্র বর্ণনা লিখুন


দ্রষ্টব্য: নীচে আইওএস 7 (আইওএস 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) {
        ...

    }
}


1
আইওএস 4 এর পরে আমার কাছে এরকম কিছু ছিল তবে এটি ওএস 7 এ ভেঙে গেছে বলে মনে হচ্ছে এখন ওয়াকર્স্টের কোডটি ব্যবহার করুন - কোডের অনেক লাইন সংরক্ষণ করুন।
ডেভ অ্যাপলটন

সুতরাং, আইওএস 7 এর জন্য এটি করার সঠিক উপায়টি কী হবে? আমরা iOS6 এসডিকে দিয়ে তৈরি করছি তবে এটি এখনও iOS7 এ অদ্ভুত দেখায়।
সেব্রোক

প্রশ্নটিতে iOS7 সমর্থন যুক্ত হয়েছে
জন রিসেলভাতো

1
পাওয়া গেছে আমাকে alertView:(UIAlertView *) clickedButtonAtIndex:(NSInteger)buttonIndexটেক্সটফিল্ড.টেক্সটটির মান আনতে আমার প্রতিনিধি পদ্ধতিতে নিম্নলিখিতটি লিখতে হয়েছিল: `এনএসএসআরটিং * দ্য ম্যাসেজ = [সতর্কতা দেখুন পাঠ্যফিল্ডঅ্যাটেক্সেক্স: 0] .পাঠ্য;;
জেমস


11

ওয়ার্কস্টের তৃতীয় কোড স্নিপেট পরীক্ষা করে দেখেছি - অসাধারণ কাজ করেছে, বাদে আমি এটিকে সংখ্যাটির পরিবর্তে ডিফল্ট ইনপুট টাইপ হিসাবে পরিবর্তন করেছি:

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];

ভাল যুক্তি! আমি সেই সময় টেক্সটফিল্ড নিয়ে গোলমাল করছিলাম এবং কোড স্নিপেট আপলোড করার আগে কীবোর্ডের ধরণটি পরিবর্তন করতে ভুলে গিয়েছিলাম। খুশী আমার কোড আপনাকে সাহায্য করতে পারে!
ওয়ার্কস্ট

11

যেহেতু আইওএস 9.0 ইউআইআইএলআরটি নিয়ন্ত্রণকারী ব্যবহার করে:

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];

5

কেবলমাত্র একটি গুরুত্বপূর্ণ টুকরো তথ্য যুক্ত করতে চেয়েছিলাম যা আমি বিশ্বাস করি যে উত্তরটি খুঁজছেন তারা ইতিমধ্যে জেনে থাকতে পারে এই ধারণা দিয়েই রেখে দেওয়া হয়েছিল। এই সমস্যাটি অনেক ঘটে এবং আমি যখন বার্তার viewAlertবোতামগুলির জন্য পদ্ধতিটি প্রয়োগ করার চেষ্টা করি তখন নিজেকে আটকে গিয়েছিলাম UIAlertView। এটি করার জন্য আপনাকে প্রথমে প্রতিনিধি শ্রেণি যুক্ত করতে হবে যা দেখতে এরকম কিছু দেখাচ্ছে:

@interface YourViewController : UIViewController <UIAlertViewDelegate>

এছাড়াও আপনি এখানে একটি খুব সহায়ক টিউটোরিয়াল খুঁজে পেতে পারেন !

আশাকরি এটা সাহায্য করবে.


5

কোনও ইউআইভিউকন্ট্রোলারে এই সুইফট কোডটি ব্যবহার করে দেখুন -

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;
}

3

সুইফট 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)

2

আমি UIAlertViewএকটি UITextFieldসাবভিউ সহ একটি ব্যবহার করব। আপনি ম্যানুয়ালি পাঠ্য ক্ষেত্রটি যুক্ত করতে পারেন বা আইওএস 5 এ, নতুন পদ্ধতির একটি ব্যবহার করতে পারেন।


আমি অন্য পোস্ট থেকে নিম্নলিখিত কোডটি যুক্ত করেছি, তবে
পপআপটি

2
codeইউআইএলআর্টভিউ * * আমারএলার্টভিউ = [[ইউআইএলআর্টভিউ বরাদ্দ] #WithTitle: @ "আপনার শিরোনাম এখানে" বার্তা: @ "এটি কভার হয়ে যায়" প্রতিনিধি: স্বতঃবিনটনবটাইটেল: @ "বাতিল করুন" অন্যান্যবটনটিইলস: @ "ওকে", নীল]; ইউআইটিেক্সটফিল্ড * আমারটেক্সটফিল্ড = [[ইউআইটিেক্সটফিল্ড বরাদ্দ] initWithFrame: সিজিআরেক্টমেক (12.0, 45.0, 260.0, 25.0)]; সিজিএফাইনট্রান্সফর্ম মাই ট্রান্সফর্ম = সিজিএফাইন ট্রান্সফর্ম মেক ট্রান্সলেশন (0.0, 130.0); [মাইআলার্টভিউ সেটট্রান্সফর্ম: মাই ট্রান্সফর্ম]; [মাই টেক্সটফিল্ড সেটব্যাকগ্রাউন্ড কালার: [ইউআইকলার হোয়াইট কালার]]; [মাইআলার্টভিউ অ্যাডসুভিউ: মাই টেক্সটফিল্ড]; [আমার অ্যালার্টভিউ শো]; [আমার অ্যালার্টভিউ প্রকাশ]
ব্যবহারকারী 605957

আমি অনুরূপ কোডটি চেষ্টা করেছি এবং এটি পাঠ্য বাক্স এবং বোতামগুলির সাথে সতর্কতা প্রদর্শন প্রদর্শন করে তবে পাঠ্যক্ষেত্রের জন্য পর্যাপ্ত জায়গা নেই, এটি শিরোনাম এবং বোতামগুলির মধ্যে আটকে আছে এবং উভয়ই স্পর্শ করে। আমি ফ্রেম স্কেল করার জন্য কিছু রূপান্তর চেষ্টা করেছি কিন্তু বোতামগুলি যেখানে ছিল তাই সেখানে তাদেরও স্থানান্তরিত করা দরকার। আমি কীভাবে বোতামগুলি প্রতিস্থাপন করব জানি না এবং আমি বিশ্বাস করতে পারি না যে প্রম্পট থেকে ব্যবহারকারীকে প্রম্পট থেকে একক লাইন পুনরুদ্ধার করার জন্য এই সমস্ত প্রয়োজনীয়। এর চেয়ে ভাল উপায় আর কি নেই?
ডিন ডেভিড 13

2

মত একটি UIAlertView দৃশ্য যুক্ত করো এই । আইওএস 5-তে কিছু "জাদু" জিনিস রয়েছে যা এটি আপনার জন্য করে (তবে এটি এনডিএর অধীনে রয়েছে)।


আমি এটি চেষ্টা করেছি এবং এটি কিছুটা কাজ করে। পপআপটি স্ক্রিনটি বন্ধ না করে (পপআপের উপরের অর্ধেকটি কেটে ফেলা হয়)। কোন ধারণা কেন?
ব্যবহারকারী 605957

আমার একই সমস্যা ছিল, সেট ট্রান্সফর্মমেট ট্রান্সলেশন (0,109) মুছে ফেলা এটি আইপ্যাড এবং আইফোন উভয় ক্ষেত্রেই আমার জন্য স্থির করে। এটি ছাড়া এটি সঠিক জায়গায় প্রদর্শিত হয়েছিল।
জোড়েল

2

জামারিন এবং সি # তে:

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();

0

জন রিস্লাভাতোর জবাবের ভিত্তিতে, ইউআইএলার্টভিউ থেকে স্ট্রিংটি পুনরুদ্ধার করতে ...

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
        })

-1
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];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.