4

J'ai une vue de liste supérieure dans mon application iPhone actuelle, qui est peuplée par le code. J'ai assemblé la vue en utilisant Interface Builder, donc il contient beaucoup de UILabel s.Est-il possible d'utiliser quelque chose comme un tableau IBOutlet?

Évidemment, je ne voudrais pas avoir name1, name2, etc. prises de ma classe, mais je préfère un tableau name[10].

Est-il possible de le faire et de connecter chaque élément à l'étiquette appropriée (ou à toute autre vue semblable à celle de l'interface)?

Répondre

0

vous ne pouvez pas le faire dans IB, mais vous pouvez créer un tableau dans votre méthode init et y ajouter toutes vos étiquettes. Par ailleurs, vous pouvez définir une étiquette sur chaque étiquette et définir une macro pour y accéder. smth comme

#define NAME[TAG] (UILabel*)[self.view viewWithTag:TAG] 
22

Vous pouvez bien sûr le faire avec le constructeur d'interface, le mot-clé est IBOutletCollection. Qu'est-ce qu'il fait est fondamentalement un NSArray sur plusieurs points de vente de l'interface de constructeur.

IBOutletCollection(UILabel) NSArray *myLabels; 

La prochaine chose serait connectera vos étiquettes dans le constructeur d'interface et vous pouvez alors utiliser le tableau pour accéder à toutes les étiquettes lors de l'exécution.

+0

Ce doit être une nouvelle fonctionnalité de l'Interface Builder et Xcode, est-ce pas? – shinjin

+0

@Shinjin: Je ne peux pas vous donner une date ou une version exacte lorsque cette fonctionnalité sera disponible, mais je sais qu'elle est là depuis un peu plus longtemps (au moins un an). – JustSid

+0

J'ai lu ailleurs que cela a été ajouté à partir d'iOS 4. Cependant, vous ne pouvez pas compter sur l'ordre des IBOutlets (ou ne pouvez pas, pas sûr si elle a été corrigée par iOS 8 ou non). – ultrageek

0

Suivez ces étapes pour créer un tableau de points de vente d'une connecter avec IB Elements (Voici exemple de UIView, vous pouvez utiliser UILabel aussi):

  • Créer un tableau de IBOutlets
  • Ajouter plusieurs UIElements (Vues) dans votre interface StoryController Storyboard
  • Sélectionnez ViewController (dans le storyboard) et ouvrez l'inspecteur de connexion
  • Il y a l'option 'Outlet Collections' dans l'inspecteur de connexion (Vous verrez un tableau de points là-bas)
  • Connect si vos éléments d'interface

-

class ViewController2: UIViewController { 


    @IBOutlet var collection:[UIView]! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

enter image description here