He encontrado preguntas similares acerca de este y sus respuestas fueron útiles, pero estoy atrapado en una última cosa. Estoy tratando de conseguir un pickerView a aparecer cuando me toque en un campo, entonces cuando los datos se seleccionan, quiero que el pickerView ocultar. Soy capaz de obtener los datos de la pickerView para ocultar, sin embargo, todavía hay un rectángulo gris que estaba detrás de la pickerView que permanece. Si me toca en la pantalla, no en un campo o el pickerView, el rectángulo gris se esconde y reaparece cuando me toque en el campo siguiente, sólo para permanecer después de los nuevos datos es elegido, hasta que me toque en alguna pantalla en blanco.

Estoy incluyendo el código de abajo y usted verá que he intentado varias opciones. Estos no son todos los que he probado, pero después de varios intentos, comencé a comentar en lugar de eliminar por lo que podía recordar lo que había hecho. Soy muy nuevo en la codificación así que agradezco a este sitio como un recurso y gracias por su ayuda.

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
@IBOutlet var enterSeason: UITextField!
@IBOutlet var enterSport: UITextField!
var dataPickerView = UIPickerView()    
var season = ["2013", "2014", "2015"] //multi-season
    var sport = ["Baseball", "Football", "Basketball", "Hockey"]
var activeDataArray = []
override func viewDidLoad() {
super.viewDidLoad()
enterSeason.inputView = dataPickerView
enterSport.inputView = dataPickerView
dataPickerView.delegate = self
dataPickerView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
    }
func textFieldDidBeginEditing(textField: UITextField) {
activeDataArray = [] //clear out the clicked field data array
        if textField == enterSeason {
activeDataArray = season
} else
if textField == enterSport {
activeDataArray = sport
}
dataPickerView.reloadAllComponents()
dataPickerView.hidden = false
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return activeDataArray.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return activeDataArray[row] as! String
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if activeDataArray == season {
enterSeason.text = season[row] as String
}
else if activeDataArray == sport {
enterSport.text = sport[row] as String
}
//trying to hide the dataPicker
        dataPickerView.hidden = true
//dataPickerView.reloadAllComponents()
        //self.dataPickerView.resignFirstResponder()
        //self.dataPickerView.frameForAlignmentRect(CGRectMake(0, 900, 375, 219))

}
//function to hide data in
    func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
//funtion to hide keyboard when screen is tapped
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
}

OriginalEl autor Greg | 2015-05-28

3 Comentarios

  1. 15

    Si quieres ocultar la pickerView, intente esto:

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if activeDataArray == season {
    enterSeason.text = season[row] as String
    }
    else if activeDataArray == sport {
    enterSport.text = sport[row] as String
    }
    //trying to hide the dataPicker
        self.view.endEditing(true)
    //dataPickerView.reloadAllComponents()
        //self.dataPickerView.resignFirstResponder()
        //self.dataPickerView.frameForAlignmentRect(CGRectMake(0, 900, 375, 219))
    
    }
    He probado tu sugerencia, pero hay un error. La solución sugerida es para insertar una coma entre endEditing y el abrir paréntesis ` ( `. Cuando agrego que coma, que todavía tiene un error y la solución sugerida es agregar otro coma, y en y en.
    Lo siento, no olvide que usted está usando rápida en lugar de objective-c

    OriginalEl autor Bannings

  2. 1

    Una forma de ocultar el selector de vista es:

    self.view.endEditing(true) 

    Esto funcionó para mí.

    Esto funciona..! En mi caso..cuando el pickerView es «activa o abierta» y la quiero pasar a otro ViewController. Gracias!

    OriginalEl autor Anas

  3. 0

    traté de renunciar a los socorristas del campo de texto en didSelectRow

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if activeDataArray == season {
    enterSeason.text = season[row] as String
    enterSeason.resignFirstResponder()
    }
    else if activeDataArray == sport {
    enterSport.text = sport[row] as String
    enterSport.resignFirstResponder()
    }

    }

    OriginalEl autor Nitrousjp

Dejar respuesta

Please enter your comment!
Please enter your name here