<?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>ZenBrains &#187; How_to</title>
	<atom:link href="http://www.zenbrains.com/blog/tag/how_to/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zenbrains.com/blog</link>
	<description>IPhone Development Team</description>
	<lastBuildDate>Tue, 17 May 2011 21:06:43 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Seguir cambios o eventos con notificaciones</title>
		<link>http://www.zenbrains.com/blog/2010/07/seguir-cambios-o-eventos-con-notificaciones/</link>
		<comments>http://www.zenbrains.com/blog/2010/07/seguir-cambios-o-eventos-con-notificaciones/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 09:30:09 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[How_to]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://www.zenbrains.com/blog/?p=565</guid>
		<description><![CDATA[Hace algún tiempo os comenté como detectar cambios en propiedades mediante el KVO (Key-Value Observing) hoy veremos como hacer lo mismo con notificaciones. La idea del ejemplo es la siguiente: Tenemos un objeto A de una clase X, del que queremos ser avisados cuando una propiedad sea modificada, para ello avisaremos a otro objeto B, para que éste [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F07%2Fseguir-cambios-o-eventos-con-notificaciones%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F07%2Fseguir-cambios-o-eventos-con-notificaciones%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hace algún tiempo os comenté como detectar cambios en propiedades mediante el KVO (Key-Value Observing) hoy veremos como hacer lo mismo con notificaciones.</p>
<p>La idea del ejemplo es la siguiente: Tenemos un objeto A de una clase X, del que queremos ser avisados cuando una propiedad sea modificada, para ello avisaremos a otro objeto B, para que éste último realize alguna acción. Para ello usaremos notificaciones, el objeto A enviará una notificación cuando cambie su propiedad y el objeto B estará pendiente de dichas notificaciones.</p>
<p>Veamos como hacer esto desde el código, primero nos creamos una función que será la encargada de enviar las notificaciones. Usamos el centro de notificaciones por defecto de nuestra aplicación y el método <strong>postNotificationName:object:</strong> para enviar la notificación. Los parámetros son un string para el nombre de la notificación y el objeto que envía la notificación.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#pragma mark -</span>
<span style="color: #6e371a;">#pragma mark Notification methods</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>sendNumberPadPressedNotification <span style="color: #002200;">&#123;</span>
     <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNotificationCenter</span> defaultCenter<span style="color: #002200;">&#93;</span> postNotificationName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;number pad pressed&quot;</span> 
                                                         object<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Después sólo tenemos que llamar a esta función cada vez que queramos notificar del evento o cambio producido, por ejemplo si pulsamos un botón.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#pragma mark -</span>
<span style="color: #6e371a;">#pragma mark Notification methods</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>IBAction<span style="color: #002200;">&#41;</span>ceroButtonPushed<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>sender <span style="color: #002200;">&#123;</span>
     <span style="color: #002200;">&#91;</span>input setString<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>numberFormater stringFromNumber<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNumber</span> numberWithFloat<span style="color: #002200;">:</span><span style="color: #2400d9;">0.00</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
     coma <span style="color: #002200;">=</span> <span style="color: #a61390;">NO</span>;
     decimal <span style="color: #002200;">=</span> <span style="color: #2400d9;">1</span>;
     <span style="color: #002200;">&#91;</span>self sendNumberPadPressedNotification<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>En la última línea llamamos a nuestro método y la notificación es enviada, en este ejemplo se usa para avisar de que<em> input</em> fue cambiado.</p>
<p>Esto es todo lo que necesita nuestro objeto A (el que avisa del cambio o evento). Veamos ahora el código para el objeto B (el que quiere ser avisado).</p>
<p>Lo primero que tenemos que hacer es registrar el objeto B en el centro de notificaciones para poder recibirlas, obviamente nos tenemos que registrar en el mismo centro de notificaciones que el objeto A, en este caso el centro por defecto.</p>
<p>Usamos para ello el método <strong>addObserver:selector:name:object:</strong> los parámetros son: el objeto a registrar, un selector del método que queremos ejecutar al recibir la notificación, el nombre de la notificación para la que queremos ser avisados y el objeto sobre el que queremos ser avisado, éste último puede ser nil o el objeto en concreto, para poder diferenciar quien manda la notificación en caso de tener más de un objeto enviando la misma notificación.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"> <span style="color: #11740a; font-style: italic;">// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.</span>
 <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>viewDidLoad <span style="color: #002200;">&#123;</span>
     <span style="color: #002200;">&#91;</span>super viewDidLoad<span style="color: #002200;">&#93;</span>;
     numberPadController <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>GenericNumberPad alloc<span style="color: #002200;">&#93;</span> initWithNibName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;GenericNumberPad&quot;</span>
     	  						      bundle<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span>
							       frame<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">20</span>, <span style="color: #2400d9;">190</span>, <span style="color: #2400d9;">280</span>, <span style="color: #2400d9;">216</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
     <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNotificationCenter</span> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self 
                                              selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>numberPadPressed<span style="color: #002200;">&#41;</span>
						  name<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;number pad pressed&quot;</span> object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
     <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self view<span style="color: #002200;">&#93;</span> addSubview<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>numberPadController view<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
 <span style="color: #002200;">&#125;</span></pre></div></div>

<p>Cómo veis en el código, el nombre de la notificación es el mismo que se usó en el objeto A. Ya sólo queda que realiceis vuestras acciones en el método que indicasteis a la hora de registrar el objeto B.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#pragma mark -</span>
<span style="color: #6e371a;">#pragma mark Notification methods</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>numberPadPressed <span style="color: #002200;">&#123;</span>
     <span style="color: #002200;">&#91;</span>importLabel setText<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>numberPadController input<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>En este ejemplo se ha usado para actualizar una etiqueta con el valor de la variable input, cada vez que ésta era cambiado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenbrains.com/blog/2010/07/seguir-cambios-o-eventos-con-notificaciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obtener archivos creados en ejecución por nuestra aplicación</title>
		<link>http://www.zenbrains.com/blog/2010/07/obtener-archivos-creados-en-ejecucion-por-nuestra-aplicacion/</link>
		<comments>http://www.zenbrains.com/blog/2010/07/obtener-archivos-creados-en-ejecucion-por-nuestra-aplicacion/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 16:02:20 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Sin categoria]]></category>
		<category><![CDATA[How_to]]></category>

		<guid isPermaLink="false">http://www.zenbrains.com/blog/?p=546</guid>
		<description><![CDATA[En este post veremos como podemos obtener archivos que nuestra aplicación cree durante su ejecución, ésto nos puede ser útil cuando queremos comprobar que se han creado correctamente o cuando queremos obtener la base de datos que estemos creando desde la aplicación. Para ello usaremos Xcode desde la ventana &#8220;organizer&#8221;, que podéis abrir desde el [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F07%2Fobtener-archivos-creados-en-ejecucion-por-nuestra-aplicacion%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F07%2Fobtener-archivos-creados-en-ejecucion-por-nuestra-aplicacion%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>En este post veremos como podemos obtener archivos que nuestra aplicación cree durante su ejecución, ésto nos puede ser útil cuando queremos comprobar que se han creado correctamente o cuando queremos obtener la base de datos que estemos creando desde la aplicación.</p>
<p>Para ello usaremos Xcode desde la ventana &#8220;organizer&#8221;, que podéis abrir desde el menú ventana. Desde el organizer y con vuestro iPhone conectado tendremos acceso a las aplicaciones instaladas en éste, sólo tendremos acceso a nuestras aplicaciones. Localizamos nuestra aplicación y pulsamos sobres el triángulo de la izquierda para ver su contenido.</p>
<p>Ahora deveríamos estar viendo un icono de una caja, el típico icono de package de las instalaciones.</p>
<p><a href="http://www.zenbrains.com/blog/wp-content/uploads/2010/07/appData.png"><img src="http://www.zenbrains.com/blog/wp-content/uploads/2010/07/appData.png" alt="" title="appData" width="455" height="186" class="aligncenter size-full wp-image-557" /></a></p>
<p>Sólo nos queda arrastrar este icono al escritorio y obtendremos una carpeta con el contenido de las carpetas <em>Documents</em>, <em>Library</em> y <em>tmp</em> de nuestra aplicación y los archivos que contienen.</p>
<p><a href="http://www.zenbrains.com/blog/wp-content/uploads/2010/07/foldersApp.png"><img src="http://www.zenbrains.com/blog/wp-content/uploads/2010/07/foldersApp.png" alt="" title="foldersApp" width="424" height="217" class="aligncenter size-full wp-image-558" /></a></p>
<p>Con esto y el post anterior que nos mostraba como copiar un archivo a la carpeta documents, ya podemos acceder a cualquier archivo que creemos en nuestra aplicación.</p>
<p>Otra cosa a tener en cuenta es que si añadimos o modificamos archivos de esta carpeta, y arrastramos la carpeta de vuelta a nuestra aplicación en la ventana organizer, podremos meter cualquier archivo que queramos en las carpetas de la aplicación.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenbrains.com/blog/2010/07/obtener-archivos-creados-en-ejecucion-por-nuestra-aplicacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Copiar un archivo de nuestro proyecto a la carpeta documentos de nuestra aplicación</title>
		<link>http://www.zenbrains.com/blog/2010/07/copiar-un-archivo-de-nuestro-proyecto-a-la-carpeta-documentos-de-nuestra-aplicacion/</link>
		<comments>http://www.zenbrains.com/blog/2010/07/copiar-un-archivo-de-nuestro-proyecto-a-la-carpeta-documentos-de-nuestra-aplicacion/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 09:07:55 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[iPhoneSimulator]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[How_to]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://www.zenbrains.com/blog/?p=549</guid>
		<description><![CDATA[Con este post mostraré como podemos copiar un archivo, que previamente hemos añadido a nuestro proyecto, a la carpeta documentos de nuestra aplicación. La idea es la de poder inicializar de una manera rápida y cómoda la base de datos, algún archivo de configuración que tengamos o cosas por el estilo que tenemos que guardar [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F07%2Fcopiar-un-archivo-de-nuestro-proyecto-a-la-carpeta-documentos-de-nuestra-aplicacion%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F07%2Fcopiar-un-archivo-de-nuestro-proyecto-a-la-carpeta-documentos-de-nuestra-aplicacion%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Con este post mostraré como podemos copiar un archivo, que previamente hemos añadido a nuestro proyecto, a la carpeta documentos de nuestra aplicación. La idea es la de poder inicializar de una manera rápida y cómoda la base de datos, algún archivo de configuración que tengamos o cosas por el estilo que tenemos que guardar en la carpeta documentos de la aplicación porque durante ejecución sufrirán cambios realizados por el usuario, evitando así tener que crearlos desde el código de la aplicación.</p>
<p>Primero, lo que tenemos que hacer es añadir ese archivo al proyecto para tener acceso a él desde el código cuando se ejecuta la aplicación. Añadid el archivo a la carpeta &#8220;Resources&#8221; del proyecto.</p>
<p>Una vez tenemos el archivo en el proyecto, podemos añadir el código para copiar el archivo a la carpeta documentos, añadid el siguiente código en vuestro AppDelegate, podéis crearos una función nueva para inicializar los archivos que necesiteis, o añadirlo directamente al init del AppDelegate.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Copy init.sqlite from resources to the Documents folder in bundle</span>
<span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span>storePath <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self applicationDocumentsDirectory<span style="color: #002200;">&#93;</span> stringByAppendingPathComponent<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;data.sqlite&quot;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSFileManager</span> defaultManager<span style="color: #002200;">&#93;</span> fileExistsAtPath<span style="color: #002200;">:</span>storePath<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
	<span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span>filePath <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span> pathForResource<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;init&quot;</span> ofType<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;sqlite&quot;</span><span style="color: #002200;">&#93;</span>;
	<span style="color: #400080;">NSData</span> <span style="color: #002200;">*</span>myData <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSData</span> dataWithContentsOfFile<span style="color: #002200;">:</span>filePath<span style="color: #002200;">&#93;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span><span style="color: #002200;">&#91;</span>myData writeToFile<span style="color: #002200;">:</span>storePath atomically<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
		NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;ERROR writting the starting database&quot;</span><span style="color: #002200;">&#41;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>En el ejemplo anterior usamos un archivo,<em> init.sqlite</em>, como base de datos inicial para nuestra aplicación y guardamos el mismo archivo bajo el nombre de <em>data.sqlite</em> en el directorio documentos de nuestra aplicación. Daos cuenta también de que usamos un if para comprobar si el archivo existe o no, de forma que sólo se ejecutará la primera vez que ejecutemos la aplicación, ésto es así, para que cuando nuestro usuario vaya añadiendo datos no se los borremos y carguemos siempre la base de datos inicial. Si durante las pruebas queréis volver a obtener el archivo original, eliminad la aplicación del iPhone o del iPhone Simulator.</p>
<p>El método <strong>applicationDocumentsDirectory</strong> es la siguiente función que nos devuelve la ruta a la carpeta.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">/**
 Returns the path to the application's Documents directory.
 */</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>applicationDocumentsDirectory <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span>NSSearchPathForDirectoriesInDomains<span style="color: #002200;">&#40;</span>NSDocumentDirectory, NSUserDomainMask, <span style="color: #a61390;">YES</span><span style="color: #002200;">&#41;</span> lastObject<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.zenbrains.com/blog/2010/07/copiar-un-archivo-de-nuestro-proyecto-a-la-carpeta-documentos-de-nuestra-aplicacion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Color de fondo de celdas vacías</title>
		<link>http://www.zenbrains.com/blog/2010/06/color-de-fondo-de-celdas-vacias/</link>
		<comments>http://www.zenbrains.com/blog/2010/06/color-de-fondo-de-celdas-vacias/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 21:14:16 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[How_to]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://www.zenbrains.com/blog/?p=516</guid>
		<description><![CDATA[Cuando trabajamos con tablas (UITableView), podemos crear celdas personalizadas a través de Interface Builder o crearlas directamente desde el código, el problem aparece cuando cambiamos el color de fondo por otro que no sea blanco y sólo creamos la celda cuando vamos a mostrar datos, pero no hacemos nada para las celdas vacías. Nos encontramos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F06%2Fcolor-de-fondo-de-celdas-vacias%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F06%2Fcolor-de-fondo-de-celdas-vacias%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Cuando trabajamos con tablas (UITableView), podemos crear celdas personalizadas a través de Interface Builder o crearlas directamente desde el código, el problem aparece cuando cambiamos el color de fondo por otro que no sea blanco y sólo creamos la celda cuando vamos a mostrar datos, pero no hacemos nada para las celdas vacías.</p>
<p>Nos encontramos con algo como esto</p>
<p><a href="http://www.zenbrains.com/blog/wp-content/uploads/2010/06/tabla1.png"><img src="http://www.zenbrains.com/blog/wp-content/uploads/2010/06/tabla1.png" alt="" title="Tabla1" width="320" height="480" class="aligncenter size-full wp-image-517" /></a></p>
<p>Esto nos pasa porque sólo creamos la celda con fondo cuando tenemos datos para rellenar, tenemos dos opciones para solucionarlo:</p>
<ul>
<li> Programar nuestro código de forma que cuando rellenamos la tabla se consideren los casos en que no hay datos, es decir cargar una celda pero sin las etiquetas o imágenes.</li>
<li>Poner a todas las celdas el mismo color de fondo antes de mirar nada.</li>
</ul>
<p>Con esta segunda opción, es la más rápida, podemos darle el mismo color a todas las celdas, la única manera de hacerlo sin crearnos una celda personalizada, sin nada más que el fondo para celdas vacías desde Interface Builder, es hacerlo dentro del código:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Customize the appearance of table view cells.</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UITableViewCell <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>tableView<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UITableView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>tableView cellForRowAtIndexPath<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSIndexPath</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>indexPath <span style="color: #002200;">&#123;</span>
&nbsp;
    <span style="color: #a61390;">static</span> <span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span>CellIdentifier <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Cell&quot;</span>;
&nbsp;
    UITableViewCell <span style="color: #002200;">*</span>cell <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>tableView dequeueReusableCellWithIdentifier<span style="color: #002200;">:</span>CellIdentifier<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>cell <span style="color: #002200;">==</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        cell <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UITableViewCell alloc<span style="color: #002200;">&#93;</span> initWithStyle<span style="color: #002200;">:</span>UITableViewCellStyleDefault reuseIdentifier<span style="color: #002200;">:</span>CellIdentifier<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #11740a; font-style: italic;">// Configure the cell.</span>
    <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>cell contentView<span style="color: #002200;">&#93;</span> setBackgroundColor<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>UIColor colorWithRed<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span> green<span style="color: #002200;">:</span><span style="color: #2400d9;">128</span><span style="color: #002200;">/</span>255.f blue<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span> alpha<span style="color: #002200;">:</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;    
    <span style="color: #a61390;">return</span> cell;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>La linea que nos interesa es la que llama al método <em>setBackgroundColor:</em>, con esta linea es la que le damos el color que queremos. Daros cuanta de que usamos<em> [cell contentView]</em>, tenemos que cambiar el color de la contentView, esta es la clave de que no se pueda hacer desde Interface Builder directamente cuando añadimos una tabla, desde la tabla no podemos acceder al contenido de la celda sin añadir explicitamente las celdas.</p>
<p>Con esa linea obtendremos algo cómo esto<br />
<a href="http://www.zenbrains.com/blog/wp-content/uploads/2010/06/tabla2.png"><img src="http://www.zenbrains.com/blog/wp-content/uploads/2010/06/tabla2.png" alt="" title="tabla2" width="320" height="480" class="aligncenter size-full wp-image-518" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenbrains.com/blog/2010/06/color-de-fondo-de-celdas-vacias/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Añadir fotos en iPhone Simulator</title>
		<link>http://www.zenbrains.com/blog/2010/06/anadir-fotos-en-iphone-simulator/</link>
		<comments>http://www.zenbrains.com/blog/2010/06/anadir-fotos-en-iphone-simulator/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 20:14:20 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Howto]]></category>
		<category><![CDATA[iPhoneSimulator]]></category>
		<category><![CDATA[How_to]]></category>

		<guid isPermaLink="false">http://www.zenbrains.com/blog/?p=511</guid>
		<description><![CDATA[No se si alguna vez os ha pasado que para limpiar vuestro simulador (iPhone Simulator) en lugar de borrar aplicación por aplicación, hicisteis un reset y después os encontrasteis conque desaparecieron todas las fotos XD, que esperabais . Bien, pues tanto si hicisteis un reset intencionadamente, sin querer, o para limpiar toda los datos y [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F06%2Fanadir-fotos-en-iphone-simulator%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.zenbrains.com%2Fblog%2F2010%2F06%2Fanadir-fotos-en-iphone-simulator%2F&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>No se si alguna vez os ha pasado que para limpiar vuestro simulador (iPhone Simulator) en lugar de borrar aplicación por aplicación, hicisteis un reset y después os encontrasteis conque desaparecieron todas las fotos XD, que esperabais <img src='http://www.zenbrains.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Bien, pues tanto si hicisteis un reset intencionadamente, sin querer, o para limpiar toda los datos y apps innecesarios que se acumulan al hacer pruebas y más pruebas aquí van un par de trucos para añadir nuevas fotos:</p>
<p><strong><span style="text-decoration: underline;">Fotos que tenemos en archivos:</span></strong></p>
<p>Para añadir fotos que ya tenemos en alguna otra carpeta solo teneis que copiarlas en la siguiente ruta.</p>
<p>~/Users/<span style="color: #ff0000;">&lt;usuario&gt;</span>/Library/Application Support/iPhone Simulator/<span style="color: #ff0000;">3.1.3</span>/Media/DCIM/100APPLE</p>
<p>Donde <span style="color: #ff0000;">&lt;usuario&gt; <span style="color: #000000;">es vuestro nombre de usuario, si no y quizá tengáis que cambiar también la versión del SDK por la que estéis usando.</span></span></p>
<p><strong>Nota:</strong> He visto varias rutas diferentes, que empiezan diractamente por ~/Library/Application Support/iPhone Simulator/&#8230;, la idea es que tenéis que estar dentro de la carpeta del iPhone Simulator, y añadir las fotos en Media/DCIM/100APPLE, si esta última carpeta no esta crearla.</p>
<p><strong>Variante: </strong>También podéis abrir Safari dentro del simulador y arrastrar el archivo a la pagina web de éste, luego haced click y no solteis el botón hasta que os aparezca la opción de salvar la imagen. Se os añade a la librería de fotos.</p>
<p><strong><span style="text-decoration: underline;">Fotos desde internet:</span></strong></p>
<p>En caso de que queráis añadir nuevas fotos desde internet, por ejemplo desde google images, solo tenéis que hacer como antes (en la variante) y pulsar sobre la imagen, aguantando el botón hasta que os deje guardarla.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenbrains.com/blog/2010/06/anadir-fotos-en-iphone-simulator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

