2017-09-01 2 views
1

J'utilise xcode8 + swift3.comment identifier UITextField d'une meilleure manière

J'ai plusieurs UITextField dans ma vue de contrôleur. Chaque UITextField a une connexion de sortie dans le code.

Je sais que je peux utiliser « tag » pour identifier UITextField, mais il semble que je ne peux utiliser le numéro comme étiquette (j'ai essayé avec une valeur de chaîne pour tag champ, mon Xcode toujours coincé, seul numéro que fonctionne tag).

Mais je ne veux pas utiliser le numéro magique dans mon code comme:

If (textField.tag == 0) { 

} 

Je me demande, est-il une meilleure façon manière ou plus descriptif dans le code pour identifier UITextField?

+3

C'est la définition de 'tag':' @property (nonatomic) balise NSInteger; ' Donc en effet, vous ne pouvez pas mettre de texte. Si chacun d'eux a un IBOutlet, pourquoi ne faites-vous pas 'if (textField == myTextFieldForSomething)' à la place? – Larme

+0

@Larme Grand point; pourriez-vous faire une réponse? Dans de nombreux cas, c'est une meilleure approche que la mienne. –

+0

@RobNapier Je suis sûr qu'il devrait y avoir quelques questions déjà posées à ce sujet (peut-être besoin de le trouver, sûrement à propos de la détection avec l'objet est ce qui dans certaines méthodes de délégué). Ils tendent généralement à répondre avec des balises ou directement "==" (égalité de pointeur) s'il y a une propriété. https://stackoverflow.com/questions/3747315/iphone-uitextfield-multiple-textfields-with-the-same-delegate https://stackoverflow.com/questions/5747889/two-consommable-dans-le-same-view etc. – Larme

Répondre

2

La balise est l'outil approprié. Il suffit de créer une énumération pour eux de suivre.

enum FieldIdentifier: Int { 
    case name = 0 
    case age = 1 
} 

if let fieldIdentifier = FieldIdentifier(rawValue: textField.tag) { 
    switch fieldIdentifier { 
    case .name: ... 
    case .age: ... 
    } 
} 

(Notez que le commentaire de Larme sur l'utilisation == est également approprié, et si vous avez déjà sorties est mieux.)