<?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>Pablo Formoso &#187; guide</title>
	<atom:link href="http://blog.pabloformoso.com/tag/guide/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pabloformoso.com</link>
	<description>Ruby, Rails, iOS y otros desbarajustes mentales.</description>
	<lastBuildDate>Wed, 05 May 2010 08:38:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Personalizar el componente UISwitch en el iPhone</title>
		<link>http://blog.pabloformoso.com/2010/04/personalizar-el-componente-uiswitch-en-el-iphone/</link>
		<comments>http://blog.pabloformoso.com/2010/04/personalizar-el-componente-uiswitch-en-el-iphone/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 19:33:27 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[UI]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[guide]]></category>

		<guid isPermaLink="false">http://blog.pabloformoso.com/?p=122</guid>
		<description><![CDATA[En uno de los proyectos en los que estoy trabajando ahora me tocó meterle mano a el componente UISwitch de la SDK del iPhone. Según la documentación oficial de Apple este componente no es customizable, pero nada más lejos de la realidad. Por suerte en uno de los libros que tengo de desarrollo para el [...]]]></description>
			<content:encoded><![CDATA[<p>En uno de los proyectos en los que estoy trabajando ahora me tocó meterle mano a el componente UISwitch de la SDK del iPhone. Según la documentación oficial de Apple este componente no es customizable, pero nada más lejos de la realidad. Por suerte en uno de los libros que tengo de desarrollo para el iPhone (el Developers Cookbook de Erica Sadun) viene una primera aproximación de como crear la clase UICustomSwitch con los métodos necesarios para modificar las dos etiquetas.</p>
<p>En una primera lectura en libro pone tanto las partes de implementación como las de definición de clase en el main.h, cosa que no me gusta mucho. Además esto nos obliga a picar todo el código y nos capa la posibilidad de usar la clase dentro de otras vistas.</p>
<p>Así que dejaré mi aportación y estructuración del UICustomSwitch para poder usarlo en el InterfaceBuilder también.</p>
<p>Como todo me gusta tener el código siempre bien ordenado, así que siempre tengo mi grupo de Categories donde meter los objetos que extienden a otros:</p>
<p><a href="http://blog.pabloformoso.com/wp-content/uploads/2010/04/Captura-de-pantalla-2010-04-13-a-las-20.48.18.jpg"><img class="aligncenter size-full wp-image-126" title="Captura de pantalla 2010-04-13 a las 20.48.18" src="http://blog.pabloformoso.com/wp-content/uploads/2010/04/Captura-de-pantalla-2010-04-13-a-las-20.48.18.jpg" alt="XCode Groups" width="189" height="102" /></a>Para que quede un poco más claro el código la estructura interna de objetos de un UISwitch es la siguiente:</p>
<ul>
<li>UISwitch
<ul>
<li>UISwitchSlider
<ul>
<li>UIImageView</li>
<li>UIImageView</li>
<li>UIView
<ul>
<li>UILabel</li>
<li>UILabel</li>
</ul>
</li>
<li>UIImageView</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Claramente tenemos que atacar en nuestro UICustomSwitch a los UILabels, pero con mucho cuidado. Por alguna extraña razón el SDK se comporta de forma diferente dependiendo del idioma en el que tengas configurado el teléfono. Mientras tenía este post con los borradores, cargue la aplicación por primera vez en el teléfono donde para mi sorpresa fallaba al arrancar. Vamos a ver el código y después explico la jugada.</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('p122code3'); return false;">View Code</a> OBJC</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1223"><td class="code" id="p122code3"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import </span>
&nbsp;
<span style="color: #a61390;">@interface</span> UICustomSwitch <span style="color: #002200;">:</span> UISwitch
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setLeftLabelText<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> labelText;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setRightLabelText<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> labelText;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>


<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('p122code4'); return false;">View Code</a> OBJC</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1224"><td class="code" id="p122code4"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;UICustomSwitch.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@interface</span> _UISwitchSlider <span style="color: #002200;">:</span> UIView
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> UICustomSwitch
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>_UISwitchSlider <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> slider <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self subviews<span style="color: #002200;">&#93;</span> lastObject<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> textHolder <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self slider<span style="color: #002200;">&#93;</span> subviews<span style="color: #002200;">&#93;</span> objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UILabel <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> leftLabel <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self textHolder<span style="color: #002200;">&#93;</span> subviews<span style="color: #002200;">&#93;</span> objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UILabel <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> rightLabel <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self textHolder<span style="color: #002200;">&#93;</span> subviews<span style="color: #002200;">&#93;</span> objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setLeftLabelText<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> labelText <span style="color: #002200;">&#123;</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> <span style="color: #002200;">*</span>currentUsersLocale <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> currentLocale<span style="color: #002200;">&#93;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>currentUsersLocale localeIdentifier<span style="color: #002200;">&#93;</span> isEqualToString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;en_US&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self leftLabel<span style="color: #002200;">&#93;</span> setText<span style="color: #002200;">:</span>labelText<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setRightLabelText<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> labelText <span style="color: #002200;">&#123;</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> <span style="color: #002200;">*</span>currentUsersLocale <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> currentLocale<span style="color: #002200;">&#93;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>currentUsersLocale localeIdentifier<span style="color: #002200;">&#93;</span> isEqualToString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;en_US&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self rightLabel<span style="color: #002200;">&#93;</span> setText<span style="color: #002200;">:</span>labelText<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>Como podéis ver en el código nos sacamos la clase _UISwitchSlider (que no viene documentada en la SDK para entrar en las tripas del Switch. El problema que os comentaba antes es que las subvistas que nos devuelve el slider, al cambiar de idioma (que no sea en_US), devuelve un UIImageView de los primeros. Por lo que habría que afinar un poco esta clase para que reciba texto e imagen y use una u otra dependiendo de la situación.</p>
<p>Agregando estas clases al proyecto podréis usar el componente también en el IB sin ningún problema. Espero os sirva de ayuda.</p>
<pre style="text-align: right;">Fuentes: "The iPhone Developer's Cookbook de Erica Sadun"</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.pabloformoso.com/2010/04/personalizar-el-componente-uiswitch-en-el-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como crear un Blog de 0 en Rail</title>
		<link>http://blog.pabloformoso.com/2009/06/como-crear-un-blog-de-0-en-rail/</link>
		<comments>http://blog.pabloformoso.com/2009/06/como-crear-un-blog-de-0-en-rail/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 11:10:41 +0000</pubDate>
		<dc:creator>pablo</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.pabloformoso.com/?p=14</guid>
		<description><![CDATA[En Six Revisions, Phil McClure ha publicado un excelente How To para principiantes en el mundo de Rails, que explica paso a pasa como crear lo más básico de un Blog. Para ello presenta el sistema de scaffolding, como funciona ActiveRecord, etc&#8230; Muy recomendado para todo aquellos que querais empezar a caminar con Ruby y [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin-right: 20px;" title="Scaffolding" src="http://images.sixrevisions.com/2009/06/04-03_scaffold.jpg" alt="" width="208" height="128" />En Six Revisions, <span class="author-bio-text">Phil McClure ha publicado un excelente How To para principiantes en el mundo de Rails, que explica paso a pasa como crear lo más básico de un Blog. Para ello presenta el sistema de scaffolding, como funciona ActiveRecord, etc&#8230; Muy recomendado para todo aquellos que querais empezar a caminar con Ruby y usar Rails para apliaciones web. </span></p>
<p><span class="author-bio-text">Os dejo el enlace a el <a title="Blog from scratch using RoR" href="http://sixrevisions.com/web-development/how-to-create-a-blog-from-scratch-using-ruby-on-rails/" target="_blank">how to aquí</a>, está en inglés.</span></p>
<p><span class="author-bio-text"><br />
</span> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pabloformoso.com/2009/06/como-crear-un-blog-de-0-en-rail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
