स्विफ्ट में iOS अलर्ट में TextField से इनपुट मूल्य प्राप्त करें


121

मैं इनपुट के साथ एक अलर्ट संदेश बनाने की कोशिश कर रहा हूं, और फिर इनपुट से मूल्य प्राप्त कर सकता हूं। मुझे कई अच्छे ट्यूटोरियल मिले हैं कि इनपुट टेक्स्ट फील्ड कैसे बनाते हैं। लेकिन मैं अलर्ट से मूल्य प्राप्त नहीं कर सकता।


IOS पर एक्शन अलर्ट?
एंडी इबेंज

@AndyIbanez हाँ, यह उल्लेख नहीं किया!
ntoonio

जवाबों:


334

स्विफ्ट 3 और इसके बाद के संस्करण के लिए अद्यतन:

//1. Create the alert controller.
let alert = UIAlertController(title: "Some Title", message: "Enter a text", preferredStyle: .alert)

//2. Add the text field. You can configure it however you need.
alert.addTextField { (textField) in
    textField.text = "Some default text"
}

// 3. Grab the value from the text field, and print it when the user clicks OK.
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
    let textField = alert.textFields![0] // Force unwrapping because we know it exists.
    print("Text field: \(textField.text)")
}))

// 4. Present the alert.
self.present(alert, animated: true, completion: nil)

स्विफ्ट 2.x

यह मानते हुए कि आप iOS पर एक्शन अलर्ट चाहते हैं:

//1. Create the alert controller.            
var alert = UIAlertController(title: "Some Title", message: "Enter a text", preferredStyle: .Alert)

//2. Add the text field. You can configure it however you need.
alert.addTextFieldWithConfigurationHandler({ (textField) -> Void in
    textField.text = "Some default text."
})

//3. Grab the value from the text field, and print it when the user clicks OK. 
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { [weak alert] (action) -> Void in
    let textField = alert.textFields![0] as UITextField
    println("Text field: \(textField.text)")
}))

// 4. Present the alert.
self.presentViewController(alert, animated: true, completion: nil)

एक समस्या नहीं है। कृपया इसे स्वीकार करने के लिए याद रखें कि यदि यह आपकी मदद करता है धन्यवाद!
एंडी इबेंज

हाय @AndyIbanez मैं अपने ऐप पर अपने कोड को लागू करने की कोशिश कर रहा हूं, हालांकि इसकी त्रुटि "अघोषित पहचानकर्ता संस्करण का उपयोग" मैं Xcode के लिए नया हूं इसलिए अगर यह मेरी ओर से एक बुनियादी त्रुटि है
Sjrrison

@Srharrison मेरा कोड स्विफ्ट के लिए है। एकमात्र कारण जो मैं सोच सकता हूं कि आप varकीवर्ड के साथ परेशानी का कारण बनेंगे यदि आप ऑब्जेक्टिव-सी में लिख रहे थे।
एंडी इबनेज़

1
क्या कोई समझा सकता है कि क्यों [weak alert]? मैं स्विफ्ट 3. पर देख रहा हूँ
Andrej

3
स्विफ्ट 3 अलर्ट के लिए चरण 3 में वैकल्पिक है, आवश्यक है "?" let textField = alert?.textFields![0] // Force unwrapping because we know it exists. print("Text field: \(textField?.text)")
जेम्स

27

स्विफ्ट 3/4

आप अपनी सुविधा के लिए नीचे दिए गए एक्सटेंशन का उपयोग कर सकते हैं।

अंदर उपयोग ViewController:

showInputDialog(title: "Add number",
                subtitle: "Please enter the new number below.",
                actionTitle: "Add",
                cancelTitle: "Cancel",
                inputPlaceholder: "New number",
                inputKeyboardType: .numberPad)
{ (input:String?) in
    print("The new number is \(input ?? "")")
}

विस्तार कोड:

extension UIViewController {
    func showInputDialog(title:String? = nil,
                         subtitle:String? = nil,
                         actionTitle:String? = "Add",
                         cancelTitle:String? = "Cancel",
                         inputPlaceholder:String? = nil,
                         inputKeyboardType:UIKeyboardType = UIKeyboardType.default,
                         cancelHandler: ((UIAlertAction) -> Swift.Void)? = nil,
                         actionHandler: ((_ text: String?) -> Void)? = nil) {

        let alert = UIAlertController(title: title, message: subtitle, preferredStyle: .alert)
        alert.addTextField { (textField:UITextField) in
            textField.placeholder = inputPlaceholder
            textField.keyboardType = inputKeyboardType
        }
        alert.addAction(UIAlertAction(title: actionTitle, style: .default, handler: { (action:UIAlertAction) in
            guard let textField =  alert.textFields?.first else {
                actionHandler?(nil)
                return
            }
            actionHandler?(textField.text)
        }))
        alert.addAction(UIAlertAction(title: cancelTitle, style: .cancel, handler: cancelHandler))

        self.present(alert, animated: true, completion: nil)
    }
}

बस ध्यान दें कि यदि आप वर्तमान करने जा रहे हैं "जोड़ें" कार्रवाई कर सुनिश्चित करें कि शैली है, तो "डिफ़ॉल्ट" "विनाशकारी" नहीं - alert.addAction (UIAlertAction (शीर्षक: actionTitle, शैली: .DEFAULT ...
Bishal घिमिरे

13

में Swift5 ans Xcode 10

सहेजें और रद्द करें क्रियाओं के साथ दो टेक्स्टफ़िल्ड जोड़ें और TextFields टेक्स्ट डेटा पढ़ें

func alertWithTF() {
    //Step : 1
    let alert = UIAlertController(title: "Great Title", message: "Please input something", preferredStyle: UIAlertController.Style.alert )
    //Step : 2
    let save = UIAlertAction(title: "Save", style: .default) { (alertAction) in
        let textField = alert.textFields![0] as UITextField
        let textField2 = alert.textFields![1] as UITextField
        if textField.text != "" {
            //Read TextFields text data
            print(textField.text!)
            print("TF 1 : \(textField.text!)")
        } else {
            print("TF 1 is Empty...")
        }

        if textField2.text != "" {
            print(textField2.text!)
            print("TF 2 : \(textField2.text!)")
        } else {
            print("TF 2 is Empty...")
        }
    }

    //Step : 3
    //For first TF
    alert.addTextField { (textField) in
        textField.placeholder = "Enter your first name"
        textField.textColor = .red
    }
    //For second TF
    alert.addTextField { (textField) in
        textField.placeholder = "Enter your last name"
        textField.textColor = .blue
    }

    //Step : 4
    alert.addAction(save)
    //Cancel action
    let cancel = UIAlertAction(title: "Cancel", style: .default) { (alertAction) in }
    alert.addAction(cancel)
    //OR single line action
    //alert.addAction(UIAlertAction(title: "Cancel", style: .default) { (alertAction) in })

    self.present(alert, animated:true, completion: nil)

}

अधिक स्पष्टीकरण के लिए https://medium.com/@chan.henryk/alert-controller-with-text-field-in-swift-3-bda7ac06026c

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.