<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog d'un développeur multi-support &#187; Mobile</title>
	<atom:link href="http://www.oni-ecchi.info/blog/category/mobile/feed" rel="self" type="application/rss+xml" />
	<link>http://www.oni-ecchi.info/blog</link>
	<description>[DIM] pour les intimes :)</description>
	<lastBuildDate>Fri, 18 Jun 2010 06:27:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Débuter sur le développement iPhone</title>
		<link>http://www.oni-ecchi.info/blog/iphone/debuter-sur-le-developpement-iphone.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/debuter-sur-le-developpement-iphone.html#comments</comments>
		<pubDate>Thu, 23 Jul 2009 07:49:07 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=428</guid>
		<description><![CDATA[Salut,
Il m&#8217;est arrivé plusieurs fois qu&#8217;on me demande ce qu&#8217;il faut pour bien débuter sur iPhone. La question est simple, la réponse un peu moins. Je vais commencer par le plus simple, le matériel.
Matériel :

un Mac intel. Désolé mais vos vieux mac à la cave ne marcheront pas.
un iPhone de test. Le simulateur ne suffit [...]]]></description>
			<content:encoded><![CDATA[<p>Salut,<br />
Il m&#8217;est arrivé plusieurs fois qu&#8217;on me demande ce qu&#8217;il faut pour bien débuter sur <a class="zem_slink" title="iPhone" rel="homepage" href="http://www.apple.com/iphone">iPhone</a>. La question est simple, la réponse un peu moins. Je vais commencer par le plus simple, le matériel.</p>
<h3>Matériel :</h3>
<ul>
<li><strong>un Mac intel</strong>. Désolé mais vos vieux mac à la cave ne marcheront pas.</li>
<li>un <strong>iPhone de test</strong>. Le simulateur ne suffit pas.</li>
<li>une<strong> licence de développeur Apple</strong>. (Pas bien cher, 70€ je crois ..). Ceux qui disent  &laquo;&nbsp;Mais moi je jailbreak j&#8217;envoie mes appli en SSH et fuck Apple&nbsp;&raquo; je leur répond &laquo;&nbsp;Vous vous faites bien chier.&nbsp;&raquo; Et les solutions pour auto signer son code pour l&#8217;envoyer &laquo;&nbsp;comme en vrai&nbsp;&raquo; c&#8217;est pas trop la joie (faut refaire les manips pour chaque projets ..)</li>
</ul>
<p>Sinon pour développer sur PC (windows notamment) sachez qu&#8217;on peut compiler des applis et se les envoyer en SSH etc. C&#8217;est faisable, mais alors quel perte de temps et vous verrez dans la suite de l&#8217;article qu&#8217;on y gagne pas tant que ça.</p>
<h3>Logiciels :</h3>
<ul>
<li><strong>Xcode </strong>le seul et unique <a class="zem_slink" title="Integrated development environment" rel="nofollow" href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> sympathique. Il auto-complète un peu, permet de compiler directement sur le téléphone sans prise de tête, fourni un debugger pas à pas.</li>
<li><strong><a class="zem_slink" title="Interface Builder" rel="wikipedia" href="http://en.wikipedia.org/wiki/Interface_Builder">Interface Builder</a></strong>. Ça c&#8217;est le truc tape à l&#8217;oeil  qu&#8217;Apple met en avant. C&#8217;est pour construire les écrans et relier les éléments graphiques à leurs représentations &laquo;&nbsp;code&nbsp;&raquo;. C&#8217;est super pratique et beaucoup plus ergonomique que de le faire sur <a class="zem_slink" title="Android" rel="homepage" href="http://code.google.com/android/">Android</a> :
<pre>// Lie les champs graphiques à des champs codes
EditText login = (EditText) findViewById(R.id.login);</pre>
</li>
<li><strong>Instruments</strong>. Super pratique pour voir l&#8217;état en temps réel de l&#8217;iphone : consommation CPU, RAM, allocations d&#8217;objets etc. C&#8217;est avec ce genre d&#8217;outils que tu te dis &laquo;&nbsp;en fait je ne sais pas coder léger&nbsp;&raquo;</li>
</ul>
<p>Donc on voit bien que même s&#8217;il existe des solutions pour compiler sur PC, les &laquo;&nbsp;<a rel="nofollow" href="toolchain iphone" target="_blank">toolchain iphone</a>&nbsp;&raquo; c&#8217;est quand même dommage de se séparer de ces logiciels. Encore que pour Xcode eclipse doit pouvoir suffir, les deux autres logiciels n&#8217;ont pas l&#8217;air d&#8217;avoir d&#8217;équivalent.</p>
<p>Et puis la finalité de développer sur iPhone c&#8217;est bien d&#8217;avoir son quart d&#8217;heure de gloire sur l&#8217;appStore non ? Alors autant commencer bien et dans la légalité. Car si Apple découvre que vous n&#8217;avez pas utilisé ses outils, que votre appli est dispo en jailbreak etc .. ben c&#8217;est foutu après.</p>
<h3>Langage de programmation</h3>
<p>Je suis passé par 3 phases quand j&#8217;ai commencé à programmer en <strong>objective-c</strong>.</p>
<ul>
<li>Déroutant au début (retain une variable ? Kesako ?)</li>
<li>a l&#8217;air d&#8217;avoir des mécanismes complexes (le parsage d&#8217;XML est chelou quand on vient du web php/as3 etc)</li>
<li>Pratique et puissant quand on comprend les mécanismes par <a class="shal" href=" http://www.oni-ecchi.info/blog/iphone/iphone-delegate.html" title=" iPhone & Delegate">delegate</a>, que l&#8217;on joue avec les threads, que l&#8217;on crée ses propres classes outils (comme pour ma classe de <a class="shal" href=" http://www.oni-ecchi.info/blog/iphone/iphone-requete-http.html" title=" iPhone & Requete HTTP">requete http</a>)</li>
</ul>
<p>Mais comment apprendre ce langage ? la réponse est simple : dans la documentation.</p>
<h3>Documentation et Tutoriel</h3>
<p>La documentation et les guides Apple sont bien pratiques pour appréhender le langage et les mécanismes.</p>
<p>Cependant pour appréhender Interface Builder et sa relation avec le code c&#8217;est pas trop ça. Je conseille les tutos d<a rel="nofollow" href="http://ipup.fr/tutoriels.php" target="_blank">&#8216;ipup.fr</a> qui ont pas mal d&#8217;images et surtout que c&#8217;est français. </p>
<p>Sinon pour plus de liens, je vous conseille toujours les liens de mon précédent article &laquo;&nbsp;<a class="shal" href=" http://www.oni-ecchi.info/blog/iphone/creer-des-applications-iphone.html" title=" Créer des applications Iphone">créer des applications iphone</a>&nbsp;&raquo; et mon flux delicious :</p>
<p><cite class="aligncenter">ps : Si vous voulez suivre mes « découvertes » iphone,  mon flux delicious est constamment mis à jour ! <a href="http://delicious.com/onishinji/iphone">http://delicious.com/onishinji/iphone</a></cite></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/debuter-sur-le-developpement-iphone.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>iPhone &amp; NSTimer</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-nstimer.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-nstimer.html#comments</comments>
		<pubDate>Fri, 17 Jul 2009 09:27:00 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=414</guid>
		<description><![CDATA[Salut,
Les NSTimers sont bien cool et en général ça ne pose aucun souci à les utiliser. J&#8217;ai bien dit en général. J&#8217;ai eu un souci avec ce matin&#8230;vraiment étrange.
Sur un projet, j&#8217;en utilise un pour déclencher une méthode dans XX secondes une fois seulement. Ça marche impeccable. Sur un nouveau projet, je réutilise le même [...]]]></description>
			<content:encoded><![CDATA[<p>Salut,</p>
<p>Les NSTimers sont bien cool et en général ça ne pose aucun souci à les utiliser. J&#8217;ai bien dit en général. J&#8217;ai eu un souci avec ce matin&#8230;vraiment étrange.</p>
<p>Sur un projet, j&#8217;en utilise un pour déclencher une méthode dans XX secondes une fois seulement. Ça marche impeccable. Sur un nouveau projet, je réutilise le même mais en faisant varier un paramètre &laquo;&nbsp;repeats&nbsp;&raquo; à YES. Et bien sur, ça ne marchait plus.</p>
<p>Voici un timer qui déclenche une méthode une seule fois :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p414code4'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4144"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p414code4"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>blabla
<span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#91;</span>NSTimer scheduledTimerWithTimeInterval<span style="color: #339933;">:</span><span style="color:#800080;">10.0</span> target<span style="color: #339933;">:</span>self selector<span style="color: #339933;">:</span>@selector<span style="color: #009900;">&#40;</span>test<span style="color: #339933;">:</span><span style="color: #009900;">&#41;</span> userInfo<span style="color: #339933;">:</span>nil repeats<span style="color: #339933;">:</span>NO<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>test<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSTimer<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>timer
<span style="color: #009900;">&#123;</span>
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;je suis appelé 1 fois&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Un timer qui se déclenche une méthode en boucle, techniquement il faudrait juste dire &laquo;&nbsp;repeats:YES&nbsp;&raquo; mais ca n&#8217;a pas marché dans mon cas. Le timer n&#8217;était jamais &laquo;&nbsp;fired&nbsp;&raquo; :p (je m&#8217;essaie à l&#8217;anglais)</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p414code5'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4145"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p414code5"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>blabla
<span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#91;</span>NSTimer scheduledTimerWithTimeInterval<span style="color: #339933;">:</span><span style="color:#800080;">10.0</span> target<span style="color: #339933;">:</span>self selector<span style="color: #339933;">:</span>@selector<span style="color: #009900;">&#40;</span>test<span style="color: #339933;">:</span><span style="color: #009900;">&#41;</span> userInfo<span style="color: #339933;">:</span>nil repeats<span style="color: #339933;">:</span>YES<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>test<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSTimer<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>timer
<span style="color: #009900;">&#123;</span>
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;je suis appelé en boucle c'est la fête.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Donc voici ce que j&#8217;ai utilisé pour que ça marche. J&#8217;ai forcé le démarrage du timer en boucle.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p414code6'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4146"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p414code6"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>blabla
<span style="color: #009900;">&#123;</span>
	NSTimer <span style="color: #339933;">*</span> timer <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSTimer timerWithTimeInterval<span style="color: #339933;">:</span> <span style="color: #0000dd;">1</span> target<span style="color: #339933;">:</span> self selector<span style="color: #339933;">:</span> @selector<span style="color: #009900;">&#40;</span>test<span style="color: #339933;">:</span><span style="color: #009900;">&#41;</span> userInfo<span style="color: #339933;">:</span> nil repeats<span style="color: #339933;">:</span> YES<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSRunLoop mainRunLoop<span style="color: #009900;">&#93;</span> addTimer<span style="color: #339933;">:</span> timer forMode<span style="color: #339933;">:</span> NSDefaultRunLoopMode<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>test<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSTimer<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>timer
<span style="color: #009900;">&#123;</span>
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;je suis appelé en boucle c'est la fête.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Voilà voilà</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-nstimer.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone &amp; Trucs et Astuces</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-trucs-et-astuces.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-trucs-et-astuces.html#comments</comments>
		<pubDate>Tue, 14 Jul 2009 09:46:53 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[astuces]]></category>
		<category><![CDATA[delegate]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=370</guid>
		<description><![CDATA[Bonjour tout le monde, encore de l&#8217;iphone .. et ouais j&#8217;aime bien faire des petits exemples :p
Cette fois ci à la demande non général de Sébastien H. voici quelques éléments de navigation que j&#8217;utilise dans mes applications.  Donc voici ce qu&#8217;il y a dans cet exemple :

Comment créer et utiliser les préférences utilisateurs à travers [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour tout le monde, encore de l&#8217;iphone .. et ouais j&#8217;aime bien faire des petits exemples :p</p>
<p>Cette fois ci à la demande non général de Sébastien H. voici quelques éléments de navigation que j&#8217;utilise dans mes applications.  Donc voici ce qu&#8217;il y a dans cet exemple :</p>
<ul>
<li>Comment créer et utiliser les préférences utilisateurs à travers l&#8217;objet NSUserDefaults et le fichier settings.bundle :p</li>
<li>Comment créer une vue modal. Vous savez ce genre d&#8217;écrans qui arrivent par le bas de l&#8217;application et qui repartent ensuite.</li>
<li>Je refait aussi un petit rappel sur les <a class="shal" href=" http://www.oni-ecchi.info/blog/iphone/iphone-delegate.html" title=" iPhone & Delegate">delegate iphone</a> pour la vue modal.</li>
<li>Comment créer et utiliser le fameux menu d&#8217;actions à la façon safari pour permettre de fournir des boutons qui arrivent aussi par le bas de l&#8217;application (UIActionSheet)</li>
<li>Comment ouvrir d&#8217;autres applications installées sur l&#8217;iphone grâce à la méthode [UIApplication sharedApplication] :p</li>
</ul>
<p>On m&#8217;a dit qu&#8217;il manquait un peu d&#8217;images, voici des screenshoots de l&#8217;application d&#8217;exemple :</p>
<p><img src="http://www.oni-ecchi.info/blog/wp-content/uploads/2009/07/Image-1.png" alt="" width="209" height="315" /><img src="http://www.oni-ecchi.info/blog/wp-content/uploads/2009/07/Image-2.png" alt="" width="209" height="315" /></p>
<p>Le design est assez simple ;p</p>
<p><cite>Et n&#8217;oubliez pas de télécharger <a rel="attachment wp-att-378" href="http://www.oni-ecchi.info/blog/iphone/iphone-trucs-et-astuces.html/attachment/exemple-navigation">le projet Xcode de cet exemple</a></cite></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-trucs-et-astuces.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone &amp; Requete HTTP</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-requete-http.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-requete-http.html#comments</comments>
		<pubDate>Thu, 09 Jul 2009 11:15:45 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[astuces]]></category>
		<category><![CDATA[delegate]]></category>
		<category><![CDATA[nsurlrequest]]></category>
		<category><![CDATA[requete]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=345</guid>
		<description><![CDATA[Yop all,
A la demande général de Fabrice Bernhard, voici une classe que j&#8217;ai faite pour me simplifier la vie quand je dois faire une requête HTTP. Vous me direz &#171;&#160;pas besoin blabla&#160;&#187;, mais cette classe gère l&#8217;envoie d&#8217;images, de sons en plus de simple paramètres POST classique. Vous faites moins les malins hein :) Et [...]]]></description>
			<content:encoded><![CDATA[<p>Yop all,</p>
<p>A la demande général de Fabrice Bernhard, voici une classe que j&#8217;ai faite pour me simplifier la vie quand je dois faire une requête <a class="zem_slink" title="Hypertext Transfer Protocol" rel="wikipedia" href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a>. Vous me direz &laquo;&nbsp;pas besoin blabla&nbsp;&raquo;, mais cette classe gère l&#8217;envoie d&#8217;images, de sons en plus de simple paramètres POST classique. Vous faites moins les malins hein :) Et si je vous dit qu&#8217;elle gère aussi si la requête doit être fait en mode synchrone ou asynchrone hein ? Ça t&#8217;en bouche un coin ?</p>
<p>Bah en fait elle est très simple, j&#8217;ai juste joué au légo avec les classes <a class="zem_slink" title="Apple" rel="homepage" href="http://www.apple.com">Apple</a>, mais c&#8217;est un lego qui me sert pas mal.</p>
<p>Voici un exemple d&#8217;utilisation, ce code est tiré de l&#8217;exemple que j&#8217;ai fait pour vous, disponible en téléchargement :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p345code9'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3459"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code" id="p345code9"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span>IBAction<span style="color: #009900;">&#41;</span> send
<span style="color: #009900;">&#123;</span>
<span style="color: #666666; font-style: italic;">// Crée la requete en mode asynchrone</span>
HttpRequest <span style="color: #339933;">*</span>masuperRequete <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>HttpRequest alloc<span style="color: #009900;">&#93;</span> initHttpRequest<span style="color: #339933;">:</span>formUrlAsk.<span style="color: #202020;">text</span> isSynchronous<span style="color: #339933;">:</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Ajoute un parametre POST['cleParam'];</span>
<span style="color: #009900;">&#91;</span>masuperRequete addParam<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;cleParam&quot;</span> valeurs<span style="color: #339933;">:</span>formParam.<span style="color: #202020;">text</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Ajoute un fichier Image. Les parametres seront sous la forme file1, file2, file3 .. etc</span>
<span style="color: #009900;">&#91;</span>masuperRequete addImage<span style="color: #339933;">:</span>imageTmp.<span style="color: #202020;">image</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// ajoute un son</span>
<span style="color: #666666; font-style: italic;">// On doit recuperer les données du son sous la forme d'un NSDATA</span>
<span style="color: #666666; font-style: italic;">// Ici le son est distant .. on le recupère donc avec the super classe en mode syncrhone</span>
HttpRequest <span style="color: #339933;">*</span>sousReq <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>HttpRequest alloc<span style="color: #009900;">&#93;</span> initHttpRequest<span style="color: #339933;">:</span>formUrlSound.<span style="color: #202020;">text</span> isSynchronous<span style="color: #339933;">:</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
NSData <span style="color: #339933;">*</span> dataSound <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>sousReq send<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Recupere le nom du son</span>
NSArray <span style="color: #339933;">*</span> mots <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>formUrlSound.<span style="color: #202020;">text</span> componentsSeparatedByString<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
NSString <span style="color: #339933;">*</span>nameoffile <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>mots lastObject<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#91;</span>masuperRequete addSound<span style="color: #339933;">:</span>dataSound nameoffile<span style="color: #339933;">:</span>nameoffile nameinform<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;mamusique&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Envoie la superRequete</span>
masuperRequete.<span style="color: #202020;">delegate</span> <span style="color: #339933;">=</span> self<span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span>masuperRequete send<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// y a un delegate pour recup le retour de la requete en mode asynchrone</span>
<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>downloadFinish<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSMutableData <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>data
<span style="color: #009900;">&#123;</span>
NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;telechargement termine&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Maintenant voici le code source complet de l&#8217;exemple</p>
<p><cite><a rel="attachment wp-att-348" href="http://www.oni-ecchi.info/blog/iphone/iphone-requete-http.html/attachment/exemple-post">Exemple de la classe HTTPRequest</a></cite></p>
<p>Pour récupérer les données par la suite, rien de plus simple tout est dans $_POST et $_FILES.</p>
<p><strong>maj</strong> : voilà le code source du fichier php que j&#8217;ai utilisé :</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p345code10'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p34510"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
</pre></td><td class="code" id="p345code10"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000088;">$content_dir</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'upload/'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/count"><span style="color: #990000;">count</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <a href="http://www.php.net/count"><span style="color: #990000;">count</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
&nbsp;
&nbsp;
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/count"><span style="color: #990000;">count</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;variable POST : <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$cle</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$cle</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' =&gt; '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$val</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'monson'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$test</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/base64_decode"><span style="color: #990000;">base64_decode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'monson'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/fopen"><span style="color: #990000;">fopen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;upload/son.caf&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;w+&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<a href="http://www.php.net/fwrite"><span style="color: #990000;">fwrite</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span><span style="color: #000088;">$test</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			fclode<span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/count"><span style="color: #990000;">count</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;variable FILES : <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$cle</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$image</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000088;">$tmp_file</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tmp_name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
&nbsp;
&nbsp;
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/is_uploaded_file"><span style="color: #990000;">is_uploaded_file</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
				<span style="color: #009900;">&#123;</span>
					<a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Le fichier est introuvable&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// on vérifie maintenant l'extension</span>
				<span style="color: #000088;">$type_file</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/strstr"><span style="color: #990000;">strstr</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$type_file</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'jpg'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span><span style="color: #666666; font-style: italic;">#038;&amp;#038; !strstr($type_file, 'jpeg') &amp;#038;&amp;#038; !strstr($type_file, 'bmp') &amp;#038;&amp;#038; !strstr($type_file, 'png') &amp;#038;&amp;#038; !strstr($type_file, 'gif') )
</span>				<span style="color: #009900;">&#123;</span>
					<span style="color: #666666; font-style: italic;">//exit(&quot;Le fichier n'est pas une image&quot;);</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// on copie le fichier dans le dossier de destination</span>
				<span style="color: #000088;">$name_file</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$cle</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; =&gt; &quot;</span> <span style="color: #339933;">.</span><span style="color: #000088;">$name_file</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; reçu <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/move_uploaded_file"><span style="color: #990000;">move_uploaded_file</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmp_file</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content_dir</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$name_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
				<span style="color: #009900;">&#123;</span>
					<a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Impossible de copier le fichier dans <span style="color: #006699; font-weight: bold;">$content_dir</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
	 <span style="color: #000088;">$rep</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;upload/&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/opendir"><span style="color: #990000;">opendir</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rep</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$f</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/readdir"><span style="color: #990000;">readdir</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  	 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/is_file"><span style="color: #990000;">is_file</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rep</span><span style="color: #339933;">.</span><span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;li&gt;Nom : &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$f</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;a href=&quot;upload/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$f</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt; DL &lt;/a&gt;'</span><span style="color: #339933;">;</span>
      		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;li&gt;Taille : &quot;</span><span style="color: #339933;">.</span><a href="http://www.php.net/filesize"><span style="color: #990000;">filesize</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rep</span><span style="color: #339933;">.</span><span style="color: #000088;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; octets&quot;</span><span style="color: #339933;">;</span>
      		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;br /&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
   		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Précisons quand même que ma classe est en alpha, certaines fonctionnalités ne sont pas implémentés. Je pense notamment à la gestion des erreurs, le delegate qui donne le taux de progression de l&#8217;upload etc. Je vous laisse le faire :p</p>
<p>Enjoy !</p>
<div class="zemanta-img zemanta-action-dragged" style="margin: 1em; display: block;">
<div class="wp-caption alignleft" style="width: 210px"><a href="http://www.crunchbase.com/company/apple"><img title="Image representing Apple as depicted in CrunchBase" src="http://www.crunchbase.com/assets/images/resized/0001/0923/10923v1-max-450x450.png" alt="Image representing Apple as depicted in CrunchBase" width="200" height="122" /></a><p class="wp-caption-text">Image via CrunchBase</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-requete-http.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>iPhone &amp; Delegate</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-delegate.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-delegate.html#comments</comments>
		<pubDate>Mon, 06 Apr 2009 16:21:10 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[delegate]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[protocol]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=323</guid>
		<description><![CDATA[Bonjour,
Voici juste un petit &#171;&#160;How to&#160;&#187; pour comprendre et jour avec les delegate sur cocoa.
Admettons vous avez une classe &#171;&#160;ListingController&#160;&#187; qui hérite d&#8217;une UIViewController qui gère une liste d&#8217;élément et que vous avez une classe &#171;&#160;DetailController&#160;&#187; qui hérite aussi d&#8217;une UIViewController mais qui donne le detail de l&#8217;élément cliqué.
Vous voulez que lorsqu&#8217;on click sur un [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Voici juste un petit &laquo;&nbsp;How to&nbsp;&raquo; pour comprendre et jour avec les delegate sur cocoa.</p>
<p>Admettons vous avez une classe &laquo;&nbsp;ListingController&nbsp;&raquo; qui hérite d&#8217;une UIViewController qui gère une liste d&#8217;élément et que vous avez une classe &laquo;&nbsp;DetailController&nbsp;&raquo; qui hérite aussi d&#8217;une UIViewController mais qui donne le detail de l&#8217;élément cliqué.</p>
<p>Vous voulez que lorsqu&#8217;on click sur un bouton posé sur la vue Détail revenir à la liste principal, puis la recharger. Revenir à la vue principal est assez simple il suffit de crée une méthode &laquo;&nbsp;IBAction&nbsp;&raquo; dans le controller Detail, liée le bouton à cette méthode via Interface builder puis écrire  :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code19'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32319"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p323code19"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span>IBAction<span style="color: #009900;">&#41;</span>goHome <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#91;</span>self.<span style="color: #202020;">view</span> removeFromSuperview<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Et le tour est joué mais bon, la liste n&#8217;est pas rechargé pour autant et il n&#8217;y a pas eu la levé d&#8217;un évènement pour la classe &laquo;&nbsp;Liste&nbsp;&raquo;. C&#8217;est là que les delegate peuvent nous être utile.</p>
<blockquote><p>Le principe est de définir des méthodes sur la classe de Detail puis les appeller/utiliser lors du click mais c&#8217;est la classe Liste qui les implémentera effectivement.</p>
</blockquote>
<p>Voici la marche à suivre :</p>
<ol>
<li>Dans la classe Detail : Définir une ou plusieurs méthodes dite &laquo;&nbsp;delegate&nbsp;&raquo; qui devront être implémenter. On appelle ce genre de déclaration un &laquo;&nbsp;protocole&nbsp;&raquo;.</li>
<li>Dans la classe Detail : Définir une propriété de classe de type &laquo;&nbsp;id&nbsp;&raquo; qui utilise le protocole. Cette propriété représente un lien vers la classe &laquo;&nbsp;parente&nbsp;&raquo; qui implémentera effectivement notre protocole.</li>
<li>Dans la classe Detail : Appeller lors du click les méthodes &laquo;&nbsp;delegate&nbsp;&raquo; sur notre protocole.</li>
<li>Dans la classe Liste : Implémenter les méthodes delegate dans notre classe &laquo;&nbsp;parente&nbsp;&raquo;.</li>
</ol>
<h3>Etape 1 :</h3>
<p>Dans le fichier &laquo;&nbsp;DetailController.h&nbsp;&raquo;, <strong>juste après</strong> les #import <strong>et avant </strong>@interface DetailController : UIViewController { } :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code20'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32320"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p323code20"><pre class="c" style="font-family:monospace;">@protocol DetailControllerDelegate
@required
<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>RetourListe<span style="color: #339933;">;</span>
@end</pre></td></tr></table></div>

<h3>Etape 2 :</h3>
<p>Toujours dans le fichier &laquo;&nbsp;DetailController.h&nbsp;&raquo;, après &laquo;&nbsp;@interface DetailController : UIViewController {&nbsp;&raquo; nous définissons une propriété que nous appellerons &laquo;&nbsp;delegate&nbsp;&raquo; :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code21'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32321"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p323code21"><pre class="c" style="font-family:monospace;">id delegate<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>puis après l&#8217;accolade définissant l&#8217;interface :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code22'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32322"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p323code22"><pre class="c" style="font-family:monospace;">@property <span style="color: #009900;">&#40;</span>nonatomic<span style="color: #339933;">,</span>assign<span style="color: #009900;">&#41;</span> id <span style="color: #339933;">&lt;</span> DetailControllerDelegate <span style="color: #339933;">&gt;</span> delegate<span style="color: #339933;">;</span>
&nbsp;
@end</pre></td></tr></table></div>

<p>Notre propriété &laquo;&nbsp;delegate&nbsp;&raquo; est de type &laquo;&nbsp;id&nbsp;&raquo; mais &laquo;&nbsp;implémente&nbsp;&raquo; le protocole précédement utilisé.</p>
<h3>Etape 3 :</h3>
<p>Nous avons définit une propriété dans le fichier &laquo;&nbsp;.h&nbsp;&raquo;, il faut maintenant s&#8217;en servir dans notre fichier &laquo;&nbsp;DetailController<strong>.m</strong>&nbsp;&raquo; :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code23'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32323"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p323code23"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#import &quot;DetailController.h&quot;</span>
@implementation DetailController
@synthesize delegate<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//synthetisé une propriété signifie que le sdk créera les getters/setters pour nous</span>
<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span>IBAction<span style="color: #009900;">&#41;</span>goHome
<span style="color: #009900;">&#123;</span>
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;Go home Liste&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>self.<span style="color: #202020;">delegate</span> RetourListe<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// dispatch l'évènement à la classe parente.</span>
	<span style="color: #009900;">&#91;</span>self.<span style="color: #202020;">view</span> removeFromSuperview<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// supprime la vue courante</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>C&#8217;est fini pour notre classe Detail  ! Vous remarquerez qu&#8217;à aucun moment il n&#8217;y a de lien vers la classe &laquo;&nbsp;Liste&nbsp;&raquo;. Le couplage est donc très faible entre ces classes. Ce principe de couplage faible est assez puissant si on y réfléchi à deux fois vu que nos classes sont, de fait, totalement indépendantes vis à vis de leur &laquo;&nbsp;parent&nbsp;&raquo; (ou du contexte d&#8217;execution pour être plus bien parlant). Bon bref ça c&#8217;était le coup de pub raté pour la puissance du modèle objet.</p>
<h3>Etape 4</h3>
<p>Implémentons les méthodes ! Dans le fichier &laquo;&nbsp;ListingController.h&nbsp;&raquo; nous déclarons notre interface comme ceci :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code24'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32324"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p323code24"><pre class="c" style="font-family:monospace;">@interface ListingController <span style="color: #339933;">:</span> UIViewController <span style="color: #339933;">&lt;</span> DetailControllerDelegate <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Et dans notre fichier &laquo;&nbsp;ListingController.m&nbsp;&raquo; il suffit d&#8217;implémenter la méthode &laquo;&nbsp;RetourListe&nbsp;&raquo;. Surtout, ne pas la déclarer dans l&#8217;interface (le fichier .h) sinon le programme se mélangera les pinceaux ! (Oui, vous utilisez deux méthodes avec le même nom ayant des portés différentes ..)</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code25'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32325"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p323code25"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>RetourListe
<span style="color: #009900;">&#123;</span>
    NSLog<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;coucou&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// some code</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><b>Edit</b> : Oups, erreur. On crée la méthode mais à un aucun moment on dit que notre classe Listing va implémenter les méthodes de detail hormis dans la déclaration (fichier.h). Il faut donc qu&#8217;à notre objet &laquo;&nbsp;DetailController&nbsp;&raquo;, juste après qu&#8217;il soit instanciée, au moment du click par exemple faire un :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code26'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p32326"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p323code26"><pre class="c" style="font-family:monospace;">DetailController<span style="color: #339933;">*</span>myView <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>DetailControlleralloc<span style="color: #009900;">&#93;</span> initWithNibName<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;DetailView&quot;</span> bundle<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span>NSBundle mainBundle<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
myView.<span style="color: #202020;">delegate</span> <span style="color: #339933;">=</span> self<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p> On définit que c&#8217;est la classe Listing (self) va implémenter les méthodes delegate de détail.</p>
<p>Et voilà, normallement ça doit marcher.</p>
<p>Ce &laquo;&nbsp;How to&nbsp;&raquo; a été écrit à partir d&#8217;un projet personnel, je ne pourrais donc pas donnée des sources qui utilisent ce concept. A l&#8217;heure où j&#8217;écrit ce billet je n&#8217;ai pas de Mac à ma disposition.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-delegate.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>iPhone &amp; AVAudioPlayer</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-avaudioplayer.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-avaudioplayer.html#comments</comments>
		<pubDate>Wed, 18 Mar 2009 16:11:19 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[avancer]]></category>
		<category><![CDATA[son]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=312</guid>
		<description><![CDATA[Aujourd&#8217;hui, j&#8217;ai bataillé pour lancer un mp3 au lancement d&#8217;une application. Tellement bataillé que je vais mettre ici le code qui va bien pour que je puisse le retrouver rapidement :) Donc peu d&#8217;explication, ceci n&#8217;est pas un tutorial.

Inclure le framework AudioToolBox &#38; AVFoundation
Faire les imports suivants : #import &#38;lt;AVFoundation/AVFoundation.h&#38;gt; #import &#38;lt;AudioToolbox/AudioToolbox.h&#38;gt;
Inclure le fichier à [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui, j&#8217;ai bataillé pour lancer un mp3 au lancement d&#8217;une application. Tellement bataillé que je vais mettre ici le code qui va bien pour que je puisse le retrouver rapidement :) Donc peu d&#8217;explication, ceci n&#8217;est pas un tutorial.</p>
<ol>
<li>Inclure le framework AudioToolBox &amp; AVFoundation</li>
<li>Faire les imports suivants : #import &amp;lt;AVFoundation/AVFoundation.h&amp;gt; #import &amp;lt;AudioToolbox/AudioToolbox.h&amp;gt;</li>
<li>Inclure le fichier à jouer dans le projet dans le dossier &laquo;&nbsp;ressources&nbsp;&raquo;</li>
<li>Déclarer une propriété de classe AVAudioPlayer * audioPlayer;</li>
</ol>
<p>Et voici le code qui va bien :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p312code28'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p31228"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
</pre></td><td class="code" id="p312code28"><pre class="c" style="font-family:monospace;">	<span style="color: #666666; font-style: italic;">// Initialise un contexte Audio</span>
	AudioSessionInitialize <span style="color: #009900;">&#40;</span>
							NULL<span style="color: #339933;">,</span>                          <span style="color: #666666; font-style: italic;">// 'NULL' to use the default (main) run loop</span>
							NULL<span style="color: #339933;">,</span>                          <span style="color: #666666; font-style: italic;">// 'NULL' to use the default run loop mode</span>
							NULL<span style="color: #339933;">,</span>  <span style="color: #666666; font-style: italic;">// a reference to your interruption callback</span>
							self                       <span style="color: #666666; font-style: italic;">// data to pass to your interruption listener callback</span>
							<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Definit quel type de son on va joué</span>
	UInt32 sessionCategory <span style="color: #339933;">=</span> kAudioSessionCategory_MediaPlayback<span style="color: #339933;">;</span>
	AudioSessionSetProperty <span style="color: #009900;">&#40;</span>
							 kAudioSessionProperty_AudioCategory<span style="color: #339933;">,</span>
							 <span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span>sessionCategory<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
							 <span style="color: #339933;">&amp;</span><span style="color: #339933;">#038;sessionCategory</span>
							 <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Définit quel fichier on utilise pour le son</span>
	NSData <span style="color: #339933;">*</span>soundFileData<span style="color: #339933;">;</span>
	soundFileData <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSData dataWithContentsOfURL<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span>NSURL fileURLWithPath<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>NSBundle mainBundle<span style="color: #009900;">&#93;</span> pathForResource<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;music.mp3&quot;</span> ofType<span style="color: #339933;">:</span>NULL<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Initialise notre lecteur avec les données du fichiers son à jouer</span>
	audioPlayer <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>AVAudioPlayer alloc<span style="color: #009900;">&#93;</span> initWithData<span style="color: #339933;">:</span>soundFileData error<span style="color: #339933;">:</span>NULL<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Precharge le son</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>audioPlayer prepareToPlay<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;myAudioPlayer:prepareToPlay returned FALSE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Définit le delegate sur la classe courante</span>
	audioPlayer.<span style="color: #202020;">delegate</span> <span style="color: #339933;">=</span> self<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Définit le volume</span>
	<span style="color: #009900;">&#91;</span>audioPlayer setVolume<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Joue le son !</span>
	<span style="color: #009900;">&#91;</span>audioPlayer play<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Voilà, la seul différence avec les codes que l&#8217;on peut trouver un peu partout est l&#8217;ajout du Session Audio. Si je l&#8217;initialise pas le son ne fonctionne que sur le simulateur et pas sur le mobile. Je ne sais pas trop pourquoi.</p>
<p>Merci à <a href="http://www.linkedin.com/in/fpillet" rel="nofollow">fpillet</a> du channel irc #iphonedev sur freenode pour son aide.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-avaudioplayer.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Iphone &amp; UIButton &amp; Multilangue</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-uibutton-multilangue.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-uibutton-multilangue.html#comments</comments>
		<pubDate>Sun, 08 Mar 2009 14:47:48 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[débutant]]></category>
		<category><![CDATA[multi langue]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=307</guid>
		<description><![CDATA[Vaste programme pour ce billet :) En fait nous allons modifier un bouton en fonction de la langue du téléphone.
Et nous allons créer un état &#171;&#160;survolé&#160;&#187; à notre bouton par programmation. InterfaceBuilder n&#8217;étant pas très clair sur cette manipulation.
Tout d&#8217;abord il nous faut un UIButton déclaré en tant que IBOutlet UIButton dans notre classe. Puis [...]]]></description>
			<content:encoded><![CDATA[<p>Vaste programme pour ce billet :) En fait nous allons modifier un bouton en fonction de la langue du téléphone.<br />
Et nous allons créer un état &laquo;&nbsp;survolé&nbsp;&raquo; à notre bouton par programmation. InterfaceBuilder n&#8217;étant pas très clair sur cette manipulation.</p>
<p>Tout d&#8217;abord il nous faut un UIButton déclaré en tant que IBOutlet UIButton dans notre classe. Puis nous relions ce bouton via InterfaceBuilder avec un bouton sur notre vue. Dans les propriétés de celui ci vous pouvez dire que c&#8217;est un &laquo;&nbsp;custom button&nbsp;&raquo;. Faites le. Et nous revenons à XCode : </p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p307code30'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p30730"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code" id="p307code30"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>viewDidLoad
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Gestion du multilanguage</span>
	NSUserDefaults<span style="color: #339933;">*</span> defs <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>NSUserDefaults standardUserDefaults<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	NSArray<span style="color: #339933;">*</span> languages <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>defs objectForKey<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;AppleLanguages&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// preferredLang vaut &quot;fr&quot;, &quot;en&quot;, &quot;de&quot;, etc </span>
	preferredLang <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>languages objectAtIndex<span style="color: #339933;">:</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Méthode avec deux jeux de langues : Française ou Anglaise dans les autres langues </span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>preferredLang isEqualToString<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;fr&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		UIImage <span style="color: #339933;">*</span> higlight <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIImage imageNamed<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;fr_btn_clik.png&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#91;</span>btnTest setBackgroundImage<span style="color: #339933;">:</span>higlight forState<span style="color: #339933;">:</span>UIControlStateHighlighted<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#91;</span>higlight release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
		UIImage <span style="color: #339933;">*</span> normal <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIImage imageNamed<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;fr_btn.png&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#91;</span>btnTest setBackgroundImage<span style="color: #339933;">:</span>normal forState<span style="color: #339933;">:</span>UIControlStateNormal<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#91;</span>normal release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> 
	<span style="color: #009900;">&#123;</span>
		UIImage <span style="color: #339933;">*</span> higlight <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIImage imageNamed<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;en_btn_clik.png&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#91;</span>btnTest setBackgroundImage<span style="color: #339933;">:</span>higlight forState<span style="color: #339933;">:</span>UIControlStateHighlighted<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#91;</span>higlight release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
		UIImage <span style="color: #339933;">*</span> normal <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIImage imageNamed<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;en_btn.png&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#91;</span>btnTest setBackgroundImage<span style="color: #339933;">:</span>normal forState<span style="color: #339933;">:</span>UIControlStateNormal<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#91;</span>normal release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Mais nous pouvons aussi concaténer le code langue avec le chemin de l'image.</span>
	<span style="color: #666666; font-style: italic;">// dans ce cas là il nous faut autant d'image que de langue possibles.</span>
	NSString <span style="color: #339933;">*</span> pathImage <span style="color: #339933;">=</span> @<span style="color: #ff0000;">&quot;_btn.png&quot;</span><span style="color: #339933;">;</span>
	NSString <span style="color: #339933;">*</span> pathImageClik <span style="color: #339933;">=</span> @<span style="color: #ff0000;">&quot;_btn_clik.png&quot;</span><span style="color: #339933;">;</span>
	UIImage <span style="color: #339933;">*</span> higlight <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIImage imageNamed<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span>pathImage stringByAppendingString<span style="color: #339933;">:</span>preferredLang <span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>btnTest setBackgroundImage<span style="color: #339933;">:</span>higlight forState<span style="color: #339933;">:</span>UIControlStateHighlighted<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>higlight release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	UIImage <span style="color: #339933;">*</span> normal <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIImage imageNamed<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span>pathImageClik stringByAppendingString<span style="color: #339933;">:</span>preferredLang <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>btnTest setBackgroundImage<span style="color: #339933;">:</span>normal forState<span style="color: #339933;">:</span>UIControlStateNormal<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>normal release<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Simple non ?</p>
<p>Après c&#8217;est sur cette méthode est un peu lourde. Il faut autant d&#8217;images que de langage et on n&#8217;utilise pas les techniques Apple pour le multilangue (avec leurs histoire de Bundle par langue, un dictionnaire de traductions etc).</p>
<p>Cependant, si comme vous avez affaire à des boutons très personnalisés (typo exotique, disposition du texte particuliere), il est peut être plus rapide de tout passer en image comme ici.</p>
<p>Chacun fait comme il le sent après ^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-uibutton-multilangue.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iPhone &amp; UIView</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-uiview.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-uiview.html#comments</comments>
		<pubDate>Sun, 08 Mar 2009 12:58:19 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[débutant]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[UIView]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=288</guid>
		<description><![CDATA[Connaissez vous l&#8217;attribut &#171;&#160;tag&#160;&#187; d&#8217;une UIView ?
Cette propriété sert à différencier les vues les unes des autres. Il s&#8217;agit d&#8217;un entier qui, par défaut, est géré par l&#8217;iphone. Mais on peut la fixer à la main et cela permet quelque liberté. En voici une utilisation :
Admettons que vous avez une vue centrale qui sert de [...]]]></description>
			<content:encoded><![CDATA[<p>Connaissez vous l&#8217;attribut &laquo;&nbsp;tag&nbsp;&raquo; d&#8217;une UIView ?</p>
<p>Cette propriété sert à différencier les vues les unes des autres. Il s&#8217;agit d&#8217;un entier qui, par défaut, est géré par l&#8217;iphone. Mais on peut la fixer à la main et cela permet quelque liberté. En voici une utilisation :</p>
<p>Admettons que vous avez une vue centrale qui sert de menu en &laquo;&nbsp;footer&nbsp;&raquo; et que vous n&#8217;utilisez pas les composants de navigations par défaut du téléphone.</p>
<p>Lors d&#8217;un clic sur un bouton du menu &laquo;&nbsp;footer&nbsp;&raquo;, vous allez ajouter une nouvelle vue par dessus votre écran principal en laissant le footer de la vue principal visible. Seulement voilà, à chaque clic sur un bouton du menu, vous allez superposer une vue à chaque fois. Question performance c&#8217;est pas tip top.</p>
<p>Alors une première approche est déjà de faire un bouton retour dans la nouvelle vue comme ceci :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p288code35'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p28835"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p288code35"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>IBAction<span style="color: #009900;">&#41;</span>back <span style="color: #009900;">&#123;</span>
&nbsp;
NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;back&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span>self.<span style="color: #202020;">view</span> removeFromSuperview<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Mais bon rien n&#8217;empêche l&#8217;utilisateur de clicker sur les éléments du footer au lieu de faire retour. Notez que même si cette nouvelle vue est ajouté par dessus la principale et la masque complètement, les autres boutons de la vue principale sont encore actifs. Sauf si on les désactive lors du click sur le bouton et qu&#8217;on les réactives lors de l&#8217;action &laquo;&nbsp;back&nbsp;&raquo; précédemment crée, via une méthode delegate.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p288code36'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p28836"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code" id="p288code36"><pre class="c" style="font-family:monospace;">&nbsp;
<span style="color: #666666; font-style: italic;">// Dans la vue qui se superpose</span>
<span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>IBAction<span style="color: #009900;">&#41;</span>back <span style="color: #009900;">&#123;</span>
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;back&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>self.<span style="color: #202020;">delegate</span> RetourMenu<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>self.<span style="color: #202020;">view</span> removeFromSuperview<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Dans la vue principale</span>
<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>RetourMenu
<span style="color: #009900;">&#123;</span>
	NSLog<span style="color: #009900;">&#40;</span>@<span style="color: #ff0000;">&quot;Réactivation des boutons &quot;</span>cachés<span style="color: #ff0000;">&quot; par la nouvelle superposés&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	btnVue1.<span style="color: #202020;">enabled</span> <span style="color: #339933;">=</span> YES<span style="color: #339933;">;</span>
	btnVue2.<span style="color: #202020;">enabled</span> <span style="color: #339933;">=</span> YES<span style="color: #339933;">;</span>
	btnVue3.<span style="color: #202020;">enabled</span> <span style="color: #339933;">=</span> YES<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Il faut maintenant gérer les vues afin d&#8217;éviter les superposements inutiles. Ceci se fait via la propriété tag. Personnellement j&#8217;ai définit le tag de ma vue principal à 100 via Interface Builder. Mais je pense qu&#8217;un self.tag = 100 dans le viewDidLoad marche aussi.</p>
<p>Puis voici comment je change de vue : </p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p288code37'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p28837"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code" id="p288code37"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>IBAction<span style="color: #009900;">&#41;</span>ClickMenu<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Vide l'écran de toutes vues, sauf celle de l'écran principale</span>
	NSArray <span style="color: #339933;">*</span>subviews <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>self.<span style="color: #202020;">view</span> superview<span style="color: #009900;">&#93;</span> subviews<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	UIView <span style="color: #339933;">*</span>view<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>view in subviews<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Le tag 100 correspond à la vue &quot;Menu Principale&quot;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>view.<span style="color: #202020;">tag</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #009900;">&#91;</span>view removeFromSuperview<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;">// Définit la vue courante et le gestionnaire d'évènement de MaVueSuivante</span>
	MaVueSuivante<span style="color: #339933;">*</span>myView <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>MaVueSuivantealloc<span style="color: #009900;">&#93;</span> initWithNibName<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;MaVueSuivanteNib&quot;</span> bundle<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span>NSBundle mainBundle<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	myView.<span style="color: #202020;">delegate</span> <span style="color: #339933;">=</span> self<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Recupère le singleton de l'application courante</span>
	MonProjetAppDelegate <span style="color: #339933;">*</span>app <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Lacoste_0_MonProjetAppDelegate <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>UIApplication sharedApplication<span style="color: #009900;">&#93;</span> delegate<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span>app.<span style="color: #202020;">window</span> addSubview<span style="color: #339933;">:</span>myView.<span style="color: #202020;">view</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Désactivation des boutons &quot;cachés&quot; par la nouvelle vue</span>
	btnVue1.<span style="color: #202020;">enabled</span> <span style="color: #339933;">=</span> NO<span style="color: #339933;">;</span>
	btnVue2.<span style="color: #202020;">enabled</span> <span style="color: #339933;">=</span> NO<span style="color: #339933;">;</span>
	btnVue3.<span style="color: #202020;">enabled</span> <span style="color: #339933;">=</span> NO<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Simple non ?</p>
<p>Enfin pour rendre une vue par dessus une autre tout en gardant la vue principal visible j&#8217;utilise la propriété &laquo;&nbsp;bounds&nbsp;&raquo; de la vue à afficher comme ceci :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p288code38'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p28838"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p288code38"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>viewDidLoad
<span style="color: #009900;">&#123;</span>
	view.<span style="color: #202020;">bounds</span> <span style="color: #339933;">=</span> CGRectMake<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">320</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">450</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Une hauteur de -30 pixels par rapport à la normal. </span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-uiview.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone &amp; TableView</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-tableview.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-tableview.html#comments</comments>
		<pubDate>Fri, 06 Mar 2009 09:01:02 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[cell]]></category>
		<category><![CDATA[cellule]]></category>
		<category><![CDATA[personnalisation]]></category>
		<category><![CDATA[tableview]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=259</guid>
		<description><![CDATA[Coupé depuis 1 mois d&#8217;internet à domicile, je n&#8217;ai pas trop le temps de blogger au boulot&#8230; Ne faisans pas trop de veille technologique et ne pouvant parler des projets d&#8217;entreprises je n&#8217;ai pas grand chose à raconter sous forme de long tutoriel.
J&#8217;entame donc une nouvelle façon de blogger mes découvertes : à travers de [...]]]></description>
			<content:encoded><![CDATA[<p>Coupé depuis 1 mois d&#8217;internet à domicile, je n&#8217;ai pas trop le temps de blogger au boulot&#8230; Ne faisans pas trop de veille technologique et ne pouvant parler des projets d&#8217;entreprises je n&#8217;ai pas grand chose à raconter sous forme de long tutoriel.</p>
<p style="text-align: justify;">J&#8217;entame donc une nouvelle façon de blogger mes découvertes : à travers de brêves. Aujourd&#8217;hui, pour renouer avec le lectorat &laquo;&nbsp;iphone&nbsp;&raquo;, il sera question de TableView !</p>
<p style="text-align: justify;"><a rel="attachment wp-att-263" href="http://www.oni-ecchi.info/blog/iphone/iphone-tableview.html/attachment/image-131"><img class="size-full wp-image-263 aligncenter" title="TableView" src="http://www.oni-ecchi.info/blog/wp-content/uploads/2009/03/image-131.png" alt="TableView" width="172" height="133" /></a></p>
<p style="text-align: justify;">Avez vous déjà essayé de rendre une ligne sur deux d&#8217;une couleur différente (le background, les textes des labels et leurs états &laquo;&nbsp;survolés&nbsp;&raquo; ? Hey bien c&#8217;est la merde ! Voici la solution que j&#8217;ai pu trouver ici et là.</p>
<ul>
<li>Avoir une classe qui gère une cellule.</li>
<li>Avoir une méthode de colorisation efficace pour la cellule</li>
<li>Détecter si la cellule courante est pair ou impair.</li>
</ul>
<p><span id="more-259"></span></p>
<p>Tout d&#8217;abord, dans la méthode à trifouiller</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p259code44'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p25944"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p259code44"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>UITableViewCell <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>tableView<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>UITableView <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>tableView cellForRowAtIndexPath<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSIndexPath <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>indexPath<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Nous devons détecter si la cellule courante est pair ou impair. Ne faites pas comme moi et  ne partez pas de l&#8217;indexPath pour déterminer l&#8217;index courant dans votre tableau d&#8217;élément pour savoir si celui ci est pair ou impair. Cette méthode marche mais elle provoque des bugs d&#8217;affichages sur un iphone (les couleurs se mélangent, s&#8217;alternent etc quand vous scroller trop vite ou d&#8217;une certaine manière). Voici la méthode magique, simple :</p>
<p>
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p259code45'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p25945"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p259code45"><pre class="c" style="font-family:monospace;">bool detectPairImpair <span style="color: #339933;">=</span> indexPath.<span style="color: #202020;">row</span> <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Et à coup sur vous aurez le bon résultat. Maintenant la phase de colorisation. Quand j&#8217;initalise ma cellule, je passe en paramètre ce booleen afin d&#8217;avoir la gestion des couleurs dans ma classe cellule. Il suffit d&#8217;appeller la méthode de colorisation adéquate.</p>
<p>
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p259code46'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p25946"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p259code46"><pre class="c" style="font-family:monospace;">UIColor <span style="color: #339933;">*</span> greenColor <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>UIColor alloc<span style="color: #009900;">&#93;</span> initWithRed<span style="color: #339933;">:</span><span style="color:#800080;">0.0</span> green<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span> blue<span style="color: #339933;">:</span><span style="color:#800080;">0.0</span> alpha<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
UIColor <span style="color: #339933;">*</span> redColor <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>UIColor alloc<span style="color: #009900;">&#93;</span> initWithRed<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span> green<span style="color: #339933;">:</span><span style="color:#800080;">0.0</span> blue<span style="color: #339933;">:</span><span style="color:#800080;">0.0</span> alpha<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Vous noterez que les couleurs vont de 0 à 1, pensez à diviser par 255 pour passer d&#8217;une représentation RGB classique à ce système. (Je vous apprend la division, pas mal non ? ^^)</p>
<p>Puis, pour le principe, voici ce que j&#8217;utilise. Cette méthode est incomplète et ne marche pas tel quel.</p>
<p>
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p259code47'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p25947"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code" id="p259code47"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span>initWithFrame<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>CGRect<span style="color: #009900;">&#41;</span>frame reuseIdentifier<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>reuseIdentifier pair<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>bool<span style="color: #009900;">&#41;</span>detectPairImpair <span style="color: #009900;">&#123;</span>
&nbsp;
UIColor <span style="color: #339933;">*</span> greenColor <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>UIColor alloc<span style="color: #009900;">&#93;</span> initWithRed<span style="color: #339933;">:</span><span style="color:#800080;">0.0</span> green<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span> blue<span style="color: #339933;">:</span><span style="color:#800080;">0.0</span> alpha<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
UIColor <span style="color: #339933;">*</span> redColor <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>UIColor alloc<span style="color: #009900;">&#93;</span> initWithRed<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span> green<span style="color: #339933;">:</span><span style="color:#800080;">0.0</span> blue<span style="color: #339933;">:</span><span style="color:#800080;">0.0</span> alpha<span style="color: #339933;">:</span><span style="color:#800080;">1.0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>detectPairImpair<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#91;</span>self setCellColor<span style="color: #339933;">:</span>greenColor<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
self.<span style="color: #202020;">libelle</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>self newLabelWithPrimaryColor<span style="color: #339933;">:</span>greenColor selectedColor<span style="color: #339933;">:</span>redColor fontSize<span style="color: #339933;">:</span><span style="color:#800080;">14.0</span> bold<span style="color: #339933;">:</span>YES<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
self.<span style="color: #202020;">libelle</span>.<span style="color: #202020;">text</span> <span style="color: #339933;">=</span> @<span style="color: #ff0000;">&quot;Coucou&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span>myContentView addSubview<span style="color: #339933;">:</span>self.<span style="color: #202020;">libelle</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
self.<span style="color: #202020;">libelle</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>self newLabelWithPrimaryColor<span style="color: #339933;">:</span>redColor selectedColor<span style="color: #339933;">:</span>greenColor fontSize<span style="color: #339933;">:</span><span style="color:#800080;">14.0</span> bold<span style="color: #339933;">:</span>YES<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
self.<span style="color: #202020;">libelle</span>.<span style="color: #202020;">text</span> <span style="color: #339933;">=</span> @<span style="color: #ff0000;">&quot;Salut&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span>myContentView addSubview<span style="color: #339933;">:</span>self.<span style="color: #202020;">libelle</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span>self setCellColor<span style="color: #339933;">:</span>redColor<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Je ne rentrerai pas dans les détails pour la création d&#8217;une cellule personnalisé, mais voici les méthodes de colorisations que j&#8217;utilise :</p>
<p>
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p259code48'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p25948"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
</pre></td><td class="code" id="p259code48"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>UILabel <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>newLabelWithPrimaryColor<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>UIColor <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>primaryColor selectedColor<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>UIColor <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>selectedColor fontSize<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>CGFloat<span style="color: #009900;">&#41;</span>fontSize bold<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>BOOL<span style="color: #009900;">&#41;</span>bold
<span style="color: #009900;">&#123;</span>
<span style="color: #808080; font-style: italic;">/*
Create and configure a label.
*/</span>
UIFont <span style="color: #339933;">*</span>font<span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>bold<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
font <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIFont boldSystemFontOfSize<span style="color: #339933;">:</span>fontSize<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
font <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIFont systemFontOfSize<span style="color: #339933;">:</span>fontSize<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #808080; font-style: italic;">/*
Views are drawn most efficiently when they are opaque and do not have a clear background, so set these defaults.  To show selection properly, however, the views need to be transparent (so that the selection color shows through).  This is handled in setSelected:animated:.
*/</span>
UILabel <span style="color: #339933;">*</span>newLabel <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>UILabel alloc<span style="color: #009900;">&#93;</span> initWithFrame<span style="color: #339933;">:</span>CGRectZero<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
newLabel.<span style="color: #202020;">backgroundColor</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>UIColor clearColor<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
newLabel.<span style="color: #202020;">opaque</span> <span style="color: #339933;">=</span> YES<span style="color: #339933;">;</span>
newLabel.<span style="color: #202020;">textColor</span> <span style="color: #339933;">=</span> primaryColor<span style="color: #339933;">;</span>
newLabel.<span style="color: #202020;">highlightedTextColor</span> <span style="color: #339933;">=</span> selectedColor<span style="color: #339933;">;</span>
newLabel.<span style="color: #202020;">font</span> <span style="color: #339933;">=</span> font<span style="color: #339933;">;</span>
<span style="color: #b1b100;">return</span> newLabel<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> setCellColor<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>UIColor<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>color
<span style="color: #009900;">&#123;</span>
cellColor <span style="color: #339933;">=</span> color<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// cellColor est une propriété de la classe de type UIColor</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
this function will layout the subviews for the cell
*/</span>
<span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>layoutSubviews <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#91;</span>super layoutSubviews<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span> self spreadBackgroundColor<span style="color: #339933;">:</span>self withColor<span style="color: #339933;">:</span>cellColor <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> spreadBackgroundColor<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>UIView<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>that withColor<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>UIColor<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>bkColor<span style="color: #339933;">&lt;</span>br <span style="color: #339933;">/&gt;</span>
<span style="color: #009900;">&#123;</span>
NSEnumerator <span style="color: #339933;">*</span>enumerator <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>that.<span style="color: #202020;">subviews</span> objectEnumerator<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
id anObject<span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>anObject <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>enumerator nextObject<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#91;</span>anObject isKindOfClass<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> UIView class<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>UIView<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>anObject<span style="color: #009900;">&#41;</span>.<span style="color: #202020;">backgroundColor</span> <span style="color: #339933;">=</span> bkColor<span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span> self spreadBackgroundColor<span style="color: #339933;">:</span>anObject withColor<span style="color: #339933;">:</span>bkColor<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Voilà, j&#8217;espère que ca vous sera utile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-tableview.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tutoriel Iphone</title>
		<link>http://www.oni-ecchi.info/blog/iphone/tutoriel-iphone.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/tutoriel-iphone.html#comments</comments>
		<pubDate>Tue, 27 Jan 2009 10:00:37 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[lien]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[vidéo]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=188</guid>
		<description><![CDATA[Bonjour,
Connaissez vous  ? Mais si voyons, le tout nouveau  service d&#8217;earling d&#8217;emob !
Je parcourais un peu le site pour voir si il y avait des tutoriaux vidéos pour programmeur, et hormis les vidéos de video2brain sur qui sont intéressante il y a peu de choses qui m&#8217;interpellait. Et c&#8217;est là que je voix &#171;&#160;Xcode&#160;&#187; [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Connaissez vous <a rel="nofollow" href="http://www.weecast.fr" target="_blank">Weecast.fr</a> ? Mais si voyons, le tout nouveau  service d&#8217;earling d&#8217;<a rel="nofollow" href="http://www.emob.fr" target="_blank">emob</a> !</p>
<p>Je parcourais un peu le site pour voir si il y avait des tutoriaux vidéos pour programmeur, et hormis les vidéos de video2brain sur <a class="shal" href=" http://www.oni-ecchi.info/blog/decouverte-flex-flash/phpflickr-flex.html" title=" phpFlickr & Flex">Flex </a>qui sont intéressante il y a peu de choses qui m&#8217;interpellait. Et c&#8217;est là que je voix &laquo;&nbsp;Xcode&nbsp;&raquo; dans leurs menu avec trois tutoriaux d&#8217;objective-c dont un parlais directement de l&#8217;<a class="shal" href=" http://www.oni-ecchi.info/blog/uncategorized/deux-nouveaux-articles-iphone.html" title=" deux nouveaux articles iPhone !">iphone</a>.</p>
<p>Il est disponible <a rel="nofollow" href="http://www.weecast.fr/xcode/iphone-premiers-pas,2256.html" target="_blank">à cette adresse</a> et vous apprendrez autant que sur le tutoriel <a rel="nofollow" href="http://mikael-morvan.developpez.com/tutoriels/iphone/sdk/rad/" target="_blank">sur developpez.com</a> à savoir :</p>
<ul>
<li>Cliquer sur un bouton pour déclencher une méthode classe</li>
</ul>
<p>A la différence d&#8217;un énième hello world pour l&#8217;iphone. Il y a cependant un petit truc d&#8217;interessant c&#8217;est la <strong>gestion du clavier virtuel</strong>. Au final on passe 15 mn pour apprendre à gérer correctement le clavier, c&#8217;est bon à prendre.</p>
<p>Je regrette simplement que sur la vidéo le commentateur ne commente pas les choses vraiment utile. On s&#8217;en fou qu&#8217;il faut mettre un point virgule ou qu&#8217;il est en train d&#8217;ouvrir une accolade non ?</p>
<p>Je pense qu&#8217;il aurait mieux fait de dire, par exemple, pourquoi il doit écrire du @property (retain, nonatomic) UILabel *monChamp dans l&#8217;entete de la classe (fichier .h) et @synthesize monChamp; dans l&#8217;implémentation effective de la classe (fichier .m). Enfin bon rien ne remplace <a rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_5_section_3.html" target="_blank">de la bonne documentation </a>pour ce genre de question. Et pendant que j&#8217;y suis il aurait pu dire deux mots sur les delagate qu&#8217;il utilise pour le clavier. Là on dirait que tout sort d&#8217;un chapeau de magicien.</p>
<p>Donc oui les tutoriaux vidéos c&#8217;est cool, c&#8217;est mode, et ca fait gagné du temps mais quitte à en faire un soyez le plus explicites possibles !</p>
<p>En tout ca, merci apple pour la documentation textuels dg vidéos de qualité.</p>
<p><cite class="aligncenter">ps : Si vous voulez suivre mes &laquo;&nbsp;découvertes&nbsp;&raquo; iphone,  mon flux delicious est constamment mis à jour ! <a href="http://delicious.com/onishinji/iphone">http://delicious.com/onishinji/iphone</a></cite></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/tutoriel-iphone.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
