Bien que Apple nous suggère de ne pas le faire, vous pouvez En effet, ajoutez une vue sélecteur à votre contrôleur de vue d'alerte. UIAlertViewController
n'a rien de magique autre qu'un contrôleur de vue normale. Tout ce que vous devez faire est de montrer le texte du titre avec beaucoup de nouvelles lignes (à savoir "Sélectionner \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n") afin d'augmenter le hauteur d'alerte, puis appel alertViewController.addSubview(datePicker)
Cependant, la question est pourquoi vous avez besoin d'écrire du code supplémentaire pour manipuler un contrôleur de vue d'alerte et gérer quel champ de texte pour définir la valeur? Voici une autre approche qui est beaucoup plus facile à maintenir et à mettre en œuvre.
Créez d'abord votre vue de sélection et configurez-la.
let picker = UIPickerView()
picker.delegate = self
picker.dateSource = self
// configure
Ensuite, pour chacun de vos champs de texte, il suffit d'appeler ce
tf1.tag = 1
tf2.tag = 2
tf3.tag = 3
tf1.delegate = self
tf2.delegate = self
tf3.delegate = self
tf1.inputView = picker
tf2.inputView = picker
tf3.inputView = picker
Pas dans votre méthode de délégué du champ de texte, store utilisateur champ de texte cliqué sur et recharger les données de vue sélecteur
var tfTag = 0
func textFieldDidBeginEditing(_ textField: UITextField) {
tfTag = textField.tag
picker.reloadAllComponents()
}
Enfin dans toutes les sources de données de votre sélecteur de vues ou méthode de délégué, chargez différents ensembles de bases de données sur le numéro de repère unique de chaque zone de texte
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if tfTag == 0 {
if component == 0 {
return "1"
}else if component == 1 {
return "2"
}else if component == 2 {
return "3"
}else{
return "4"
}
}else if tfTag == 1 {
//...
}else{
//...
}
}
Merci c'est ce que je veux. Mais j'ai un problème avec ça. Je ne peux pas utiliser uipickerview quand j'ai plusieurs/plusieurs champs –
@EKChhuon Mis à jour –
Merci beaucoup, je l'ai eu –