Programmer une application iOS sans utiliser Interface Builder ?

OckamOckam Membre
23:09 modifié dans Apple Developer Programs #1
Bonjour à  tous,
Je suis nouveau sur ce forum et c'est après de nombreuses recherches infructueuses que j'ai décidé de poser directement la question :)

Je suis développeur depuis quelques années en ActionScript 3 sous Flash et en AJAX.
Suite a l'intérêt à  la fois créatif et lucratif j'ai débuté une auto-formation au développement iOS.

Comme je suis du genre à  vouloir maà®triser la substantifique moelle des choses ( Autant que faire se peut en tout cas ;) ) j'ai commencé par me former au C à  l'aide de ce très bon tuto puis j'ai embreillé sur l'Objective-C par le biais respectivement de ce tuto ainsi que des livres "Objective-C, Créez vos applications iPhone et iPad" par Gaël Durand et Abdelhalim Rafrari et "Programmation Cocoa sous Mac OS X" par Aaron Hillegass.

Hélas, le tuto, les livres comme mes recherches diverses sur Internet se sont toutes terminées par le même constat, impossible d'apprendre à  créer une application Mac OS ou iOS sans passer par Interface Builder.

Je ne renie pas en soir l'outils qu'est Interface Builder et je conçoit parfaitement le gain de temps qu'il peut apporter, cependant, je souhaite apprendre d'abord à  intégrer les objets, images, boutons, événements, etc. directement par le code afin d'avoir une parfaite maà®trise et compréhension des procédures.
Dans un deuxième temps je verrais IB :)


C'est pourquoi telle est ma question :
Connaissez-vous des tutos et/ou des livres qui permettent d'apprendre la programmation Mac OS / iOS sans passer par Interface Builder ?

Si non, dans tout les cas de figures, si vous avez le moindre lien à  m'indiquer qui m'aiguillerait sur les différentes techniques pour pallier à  Interface Builder comme la création d'événements, je suis preneur :)


J'ai déjà  pus trouver comment intégrer des boutons, images et champs de textes mais c'est encore un peu léger.


Merci par avance,
Bonne journée.

Réponses

  • Eric P.Eric P. Membre
    23:09 modifié #2
    Bonjour et bienvenue,

    De mémoire, il me semble que les exemples d'Erica Sadun : http://ericasadun.com utilisent assez peu IB.

    Mais ne pas utiliser IB revient à  se compliquer la tâche...

    Sinon il est d'usage de se présenter.
  • OckamOckam Membre
    23:09 modifié #3
    Merci, Eric, pour ta réponse,
    Je viens de mettre un topic de présentation dans la partie appropriée :)

    Pour Eric Sadun, je ne connaissais pas, je vais analyser ça attentivement pour voir ce que je peux en retirer.
    Comme je l'ai expliqué, j'ai bien compris que IB permet de gagner du temps cependant même si je peux créer des interface avec, j'aimerais être en mesure de le faire aussi avec le code, ne serais-ce que pour comprendre l'essence de la construction d'une application afin de l'optimiser et, surtout, de pouvoir générer dynamiquement des objets graphiques.

    C'est peut-être passer plus de temps pour l'apprentissage pour le moment mais ce sera un temps que je gagnerais ensuite lors de la construction de mes futures applications. :)
  • CéroceCéroce Membre, Modérateur
    juin 2011 modifié #4
    En fait, il n'y a pas de différence fondamentale à  instancier les objets de l'IHM par le code plutôt que par l'intermédiaire d'un .nib. Comme le souligne Eric, le faire par le code est surtout bien plus lent, et ne se justifie guère que si la création d'éléments est dynamique (... ou parfois pour les tests automatisés).

    Je vais essayer de résumer les différences:

    Méthode d'init
    Quand un objet est désérialisé d'un fichier .nib, il est initialisé par la méthode initWithCoder: du protocole NSCoding. Le fichier .nib contient les valeurs des variables d'instance qui sont appliquées à  sa création.
    Quand on crée par le code, on utilise la méthode d'init désignée, c'est à  dire celle qui a le plus de sens pour cet objet. Ainsi pour une  UIView, ce sera initWithFrame:, pour un NSObject, ce sera -init.

    Outlets
    Une outlet est un pointeur vers un objet instancié depuis les nib. De fait, l'outlet deviendra une simple variable d'instance vers l'objet créé par le code.

    Actions
    Les actions sont implémentées grâce à  la méthode -[UIControl addTarget:action:forControlEvents:]. Ajouter des actions par le code, ou en les tirant sous IB n'est pas donc pas très différent.

    Voilà , je crois qu'il n'y a rien d'autre...
  • AliGatorAliGator Membre, Modérateur
    23:09 modifié #5
    Exemple : ajouter un bouton à  une [tt]UIView* parentView[/tt] donnée :

    Par IB
    • Tu fais glisser le bouton sur ta vue (tu le places et le dimensionnes à  la souris) et lui donnes les titres pour les divers état
    • Tu connectes son action par un ctrl-clic + glisser jusqu'à  ton ViewController qui va implémenter l'action

    Par code
    <br />UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];<br />btn.frame = CGRectMake(10,10,100,100); // position et taille à  rentrer manuellement<br />[btn setTitle:@&quot;Ton titre&quot; forState:UIControlStateNormal];<br />[btn setTitle:@&quot;Ton titre...&quot; forState:UIControlStateHighlighted];<br />[btn setTitle:@&quot;Indisponible&quot; forState:UIControlStateDisabled];<br />[btn addTarget:self action:@selector(monAction:) forControlEvent:UIControlEventTouchUpInside];<br />[parentView addSubview btn];<br />
    
  • OckamOckam Membre
    23:09 modifié #6
    Merci pour les informations,

    Associer avec le reste ainsi que la doc fournit par Apple je pense que je devrais m'en sortir :)
Connectez-vous ou Inscrivez-vous pour répondre.