2017-07-06 3 views
0

Swift 3 iOS 10: Je veux ajouter UIPickerView dans UIAlertView afin que je puisse choisir l'article et définir sa valeur pour le textField. Je pourrais le faire avec UIView mais je veux l'améliorer d'une manière meilleure et naturelle. Est-il possible de faire ceci ou n'importe quelle issue?comment ajouter uipickerview dans uialertview swift 3

Merci d'avance!

C'est ce que je l'ai fait,

PIX1: mon textfield: https://z-p3-scontent.fpnh5-1.fna.fbcdn.net/v/t1.0-9/19702221_1969127863363332_1282515913735651533_n.jpg?oh=ece774626e6691c531dc69b168104fcc&oe=59D72E14

Pix2: mon alerte:https://z-p3-scontent.fpnh5-1.fna.fbcdn.net/v/t1.0-9/19665630_1969127860029999_9139151345242136168_n.jpg?oh=d56be1efc3bd772ff68e7e45fa7ebfae&oe=5A0F290F

Répondre

1

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{ 
     //... 
    } 
} 
+0

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 –

+0

@EKChhuon Mis à jour –

+0

Merci beaucoup, je l'ai eu –