Irfan Saeed
Irfan Saeed

Reputation: 141

Set TextField and PickerView In UIAlertView

I want to create an alert with textfield and picker view. I want that at top show picker view first and then textfield below picker view.

enter image description here

Here is my code

let alert = UIAlertController(title: "Create Meditation", message: "myMsg", preferredStyle: .alert)

alert.view.addSubview(pickerView)

alert.addTextField { (textField) in
textField.text = "Enter Message"

}


let action = UIAlertAction(title: "Send", style: .default) { (action) in
    let textField = alert.textFields

    print(textField)

            }
let action2 = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

alert.addAction(action)
alert.addAction(action2)

let height:NSLayoutConstraint = NSLayoutConstraint(item: alert.view, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: self.view.frame.height * 0.50)
    alert.view.addConstraint(height);

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

Upvotes: 2

Views: 1455

Answers (4)

Osman
Osman

Reputation: 1586

You can use the following code :

 let alertView = UIAlertController(
            title: "Select",
            message: "\n\n\n\n\n\n\n\n\n",
            preferredStyle: .alert)

        let pickerView = UIPickerView(frame:
            CGRect(x: 0, y: 50, width: 260, height: 162))
        pickerView.dataSource = self
        pickerView.delegate = self
        pickerView.backgroundColor = UIColor.lightGray.withAlphaComponent(0.5)

        alertView.view.addSubview(pickerView)
        alertView.addTextField(configurationHandler: configurationTextField)
        alertView.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler:nil))
        alertView.addAction(UIAlertAction(title: "Ok", style: .default, handler:{ (UIAlertAction) in
            guard let text = self.textField?.text else {return}
            print(text)
        }))
        present(alertView, animated: true, completion: {
            pickerView.frame.size.width = alertView.view.frame.size.width
        })

Upvotes: 1

Manvir Singh
Manvir Singh

Reputation: 139

try these Pods hope it helps you

https://github.com/nealyoung/NYAlertViewController

Upvotes: 0

corocraft
corocraft

Reputation: 150

You should create a uiviewcontroller and give it this effect.

For example: In the next image, i created a view as modal. it is a uiviewcontroller with a gray view (In your case, in the gray view you should put the uitextfield and uipickerview). Then, i configure storyboard segue as present modally and to give the effect of the modal in the uiviewcontroller put:

self.view.backgroundColor = UIColor.black.withAlphaComponent(0.8)

enter image description here

enter image description here

Upvotes: 1

Shmidt
Shmidt

Reputation: 16674

You can't use UIAlertController for that, as it doesn't have an option to add views other than textfields. So, you have to write your own control, that will mimic UIAlertController. You can write view controller and present it modally, or create a view and add it to the controller view. Also, could be good idea to try to find ready component on github.com or cocoacontrols.com and modify it as you need it.

Upvotes: 0

Related Questions