Boucle à travers subview pour vérifier si UITextField est vide-Swift

<!-Je me demande comment transformer essentiellement le code de l'objectif c ci-dessous en swift.

ceci fera le tour de tous les sous-vues sur ma vue désirée, vérifiera s'ils sont des champs de texte, et vérifiera ensuite s'ils sont vides de non.

for (UIView *view in contentVw.subviews) {
    NSLog(@"%@", view);
    if ([view isKindOfClass:[UITextField class]]) {
        UITextField *textfield = (UITextField *)view;
        if (([textfield.text isEqualToString:""])) {
            //show error
            return;
        }
    }
}
<!-Voici où je suis avec swift translation jusqu'à présent:

for view in self.view.subviews as [UIView] {
    if view.isKindOfClass(UITextField) {
        //...

    }
}

N'importe quelle aide serait grande!

23
demandé sur Ryan 2014-08-02 22:06:27

2 réponses

Swift 4 et Swift 3: - Une réponse très simple que vous pouvez comprendre facilement : - vous pouvez manipuler toutes sortes d'objets comme UILable, UITextfields, UIButtons, uivi, UIImages . tout type de objecs etc.

for subviews in self.view.subviews
{
    if subviews is UITextField
    {
        //MARK: - if the sub view is UITextField you can handle here
        if subview.text == ""
        {
            //MARK:- Handle your code
        }
    }
    if subviews is UIImageView
    {
     //MARK: - check image
      if subviews.image == nil
      {
             //Show or use your code here
      }

    }
}
2
répondu Shakeel Ahmed 2018-03-02 21:07:38

mise à Jour pour Swift 2 (et plus tard): à partir de Swift 2 / Xcode 7 cela peut être simplifié.

  • en Raison de l'Objective-C "léger génériques", self.view.subviews est déjà déclaré que [UIView] dans Swift, donc la distribution il n'est plus nécessaire.
  • Énumération et en fonte peut être combiné avec une boucle avec un motif.

Ce qui donne:

for case let textField as UITextField in self.view.subviews {
    if textField.text == "" {
        // show error
        return
    }
}

ancienne réponse pour Swift 1.2:

dans Swift c'est bien fait avec le option abattu opérateur as?:

for view in self.view.subviews as! [UIView] {
    if let textField = view as? UITextField {
        if textField.text == "" {
            // show error
            return
        }
    }
}

Voir "Passer" dans le Livre de Swift.

77
répondu Martin R 2016-12-08 07:46:35