<?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/"
	>

<channel>
	<title>Mindbike</title>
	<atom:link href="http://www.mindbike.com.br/blog/index.php?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.mindbike.com.br/blog</link>
	<description>Desenvolvimento iPhone</description>
	<pubDate>Sat, 04 Sep 2010 18:32:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Apostila iPhone - Table View - Criando Classe</title>
		<link>http://www.mindbike.com.br/blog/?p=395</link>
		<comments>http://www.mindbike.com.br/blog/?p=395#comments</comments>
		<pubDate>Sat, 04 Sep 2010 18:30:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mindbike]]></category>

		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[XCode]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=395</guid>
		<description><![CDATA[Para criar uma classe, de um click na pasta do grupo CustomCell e em File / File New.






















Esta ação irá abrir uma nova janela para você selecionar que tipo de arquivo você deseja incluir no projeto.


Vamos selecionar Cocoa Touch Class / Objective-C class.
 Ao escolher estas opções, o XCode irá perguntar qual o nome que [...]]]></description>
			<content:encoded><![CDATA[<p><span>Para criar uma classe, de um click na pasta do grupo <strong>CustomCell</strong> e em <em>File</em> / <em>File</em> <em>New</em>.</span></p>
<div><img class="alignleft size-large wp-image-396" title="figura-542" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/09/figura-542-1024x640.png" alt="figura-542" width="614" height="384" /></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div><span>Esta ação irá abrir uma nova janela para você selecionar que tipo de arquivo você deseja incluir no projeto.</span></div>
<div><span></p>
<p><img class="alignleft size-large wp-image-397" title="figura-56" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/09/figura-56-1024x640.png" alt="figura-56" width="614" height="384" /></p>
<p>Vamos selecionar <em>Cocoa Touch Class</em> / <em>Objective-C class</em>.</p>
<p><span><span> </span>Ao escolher estas opções, o XCode irá perguntar qual o nome que deseja colocar na sua classe. Vamos colocar <strong>CustomCell</strong>. Observe que quando colocar o nome da classe, você estará criando o <strong>header</strong> do arquivo, e se observar melhor, perceberá que existe a opção de criar automaticamente a implementação (“.m”).</span></p>
<p><span><span> </span>Agora vamos implementar de fato estas classes. No arquivo CustomCell.h, digite o seguinte código:</span></p>
<p><span>@interface</span><span> CustomCell : UITableViewCell</span></p>
<p><span>{</span></p>
<p><span><span> </span></span><span>BOOL</span><span> checked;</span></p>
<p><span><span> </span></span><span>NSString</span><span> *title;</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>UIButton</span><span> *checkButton;</span></p>
<p><span>}</span></p>
<p><span>@property</span><span> (</span><span>nonatomic</span><span>, </span><span>retain</span><span>) </span><span>NSString</span><span> *title;</span></p>
<p><span>@property</span><span> (</span><span>nonatomic</span><span>, </span><span>assign</span><span>) </span><span>BOOL</span><span> checked;</span></p>
<p><span>- (</span><span>void</span><span>)checkAction:(</span><span>id</span><span>)sender;</span></p>
<p><span>@end</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span>No arquivo CustomCell.m digite o seguinte código:</span></p>
<p><span>@implementation</span><span> CustomCell</span></p>
<p><span>@synthesize</span><span> checked, title;</span></p>
<p><span>- (</span><span>id</span><span>)initWithStyle:(</span><span>UITableViewCellStyle</span><span>)style reuseIdentifier:(</span><span>NSString</span><span> *)reuseIdentifier</span></p>
<p><span>{</span></p>
<p><span> </span><span>if</span><span> (</span><span>self</span><span> = [</span><span>super</span><span> </span><span>initWithStyle</span><span>:style </span><span>reuseIdentifier</span><span>:reuseIdentifier])</span></p>
<p><span><span> </span>{</span></p>
<p><span><span> </span></span><span>self</span><span>.</span><span>accessoryType</span><span> = </span><span>UITableViewCellAccessoryDetailDisclosureButton</span><span>;</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>// cell&#8217;s title label</span></p>
<p><span><span> </span></span><span>self</span><span>.textLabel.backgroundColor = </span><span>self</span><span>.backgroundColor;</span></p>
<p><span><span> </span></span><span>self</span><span>.textLabel.opaque = </span><span>NO</span><span>;</span></p>
<p><span><span> </span></span><span>self</span><span>.textLabel.textColor = [</span><span>UIColor</span><span> </span><span>blackColor</span><span>];</span></p>
<p><span><span> </span></span><span>self</span><span>.textLabel.highlightedTextColor = [</span><span>UIColor</span><span> </span><span>whiteColor</span><span>];</span></p>
<p><span><span> </span></span><span>self</span><span>.textLabel.font = [</span><span>UIFont</span><span> </span><span>boldSystemFontOfSize</span><span>:</span><span>18.0</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>// cell&#8217;s check button</span></p>
<p><span><span> </span></span><span>checkButton</span><span> = [[</span><span>UIButton</span><span> </span><span>buttonWithType</span><span>:</span><span>UIButtonTypeCustom</span><span>] </span><span>retain</span><span>];</span></p>
<p><span><span> </span></span><span>checkButton</span><span>.frame = </span><span>CGRectZero</span><span>;</span></p>
<p><span><span> </span></span><span>checkButton</span><span>.contentVerticalAlignment = </span><span>UIControlContentVerticalAlignmentCenter</span><span>;</span></p>
<p><span><span> </span></span><span>checkButton</span><span>.contentHorizontalAlignment = </span><span>UIControlContentHorizontalAlignmentCenter</span><span>;</span></p>
<p><span><span> </span>[</span><span>checkButton</span><span> </span><span>addTarget</span><span>:</span><span>self</span><span> </span><span>action</span><span>:</span><span>@selector</span><span>(</span><span>checkAction</span><span>: ) </span><span>forControlEvents</span><span>:</span><span>UIControlEventTouchDown</span><span>];</span></p>
<p><span><span> </span></span><span>checkButton</span><span>.backgroundColor = </span><span>self</span><span>.backgroundColor;</span></p>
<p><span><span> </span>[</span><span>self</span><span>.contentView </span><span>addSubview</span><span>:</span><span>checkButton</span><span>];</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span></span><span>return</span><span> </span><span>self</span><span>;</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>void</span><span>)layoutSubviews</span></p>
<p><span>{</span></p>
<p><span><span> </span>[</span><span>super</span><span> </span><span>layoutSubviews</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span> </span><span>CGRect</span><span> contentRect = [</span><span>self</span><span>.contentView </span><span>bounds</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CGRect</span><span> frame = </span><span>CGRectMake</span><span>(contentRect.</span><span>origin</span><span>.</span><span>x</span><span> + </span><span>40.0</span><span>, </span><span>8.0</span><span>, contentRect.</span><span>size</span><span>.</span><span>width</span><span>, </span><span>30.0</span><span>);</span></p>
<p><span><span> </span></span><span>self</span><span>.textLabel.frame = frame;</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>// layout the check button image</span></p>
<p><span><span> </span></span><span>UIImage</span><span> *checkedImage = [</span><span>UIImage</span><span> </span><span>imageNamed</span><span>:</span><span>@"checked.png"</span><span>];</span></p>
<p><span><span> </span>frame = </span><span>CGRectMake</span><span>(contentRect.</span><span>origin</span><span>.</span><span>x</span><span> + </span><span>10.0</span><span>, </span><span>12.0</span><span>, checkedImage.</span><span>size</span><span>.</span><span>width</span><span>, checkedImage.</span><span>size</span><span>.</span><span>height</span><span>);</span></p>
<p><span><span> </span>checkButton.frame = frame;</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>UIImage</span><span> *image = (</span><span>self</span><span>.checked) ? checkedImage: [</span><span>UIImage</span><span> </span><span>imageNamed</span><span>:</span><span>@"unchecked.png"</span><span>];</span></p>
<p><span><span> </span></span><span>UIImage</span><span> *newImage = [image </span><span>stretchableImageWithLeftCapWidth</span><span>:</span><span>12.0</span><span> </span><span>topCapHeight</span><span>:</span><span>0.0</span><span>];</span></p>
<p><span><span> </span>[checkButton </span><span>setBackgroundImage</span><span>:newImage </span><span>forState</span><span>:</span><span>UIControlStateNormal</span><span>];</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>void</span><span>)dealloc</span></p>
<p><span>{</span></p>
<p><span><span> </span>[checkButton </span><span>release</span><span>];</span></p>
<p><span><span> </span>[title </span><span>release</span><span>];</span></p>
<p><span> [</span><span>super</span><span> </span><span>dealloc</span><span>];</span></p>
<p><span>}</span></p>
<p>// called when the checkmark button is touched</p>
<p><span>- (</span><span>void</span><span>)checkAction:(</span><span>id</span><span>)sender</span></p>
<p><span>{</span></p>
<p><span><span> </span></span><span>// note: we don&#8217;t use &#8217;sender&#8217; because this action method can be called separate from the button (i.e. from table selection)</span></p>
<p><span><span> </span></span><span>self</span><span>.checked = !</span><span>self</span><span>.checked;</span></p>
<p><span><span> </span></span><span>UIImage</span><span> *checkImage = (</span><span>self</span><span>.checked) ? [</span><span>UIImage</span><span> </span><span>imageNamed</span><span>:</span><span>@"checked.png"</span><span>] : [</span><span>UIImage</span><span> </span><span>imageNamed</span><span>:</span><span>@"unchecked.png"</span><span>];</span></p>
<p><span><span> </span>[checkButton </span><span>setImage</span><span>:checkImage </span><span>forState</span><span>:</span><span>UIControlStateNormal</span><span>];</span></p>
<p><span>}</span></p>
<p><span><span> </span>Agora, vamos terminar a nossa nova implementação.</span></p>
<p><span><span> </span>Diferentemente do tópico anterior, vamos conhecer mais alguns métodos que podem (e neste caso devem) ser implementados. Porém antes, vamos digitar o seguinte código no arquivo <strong>CellsViewController</strong>.<strong>h</strong>:</span></p>
<p><span>@interface</span><span> CellsViewController : UIViewController </span></p>
<p><span> &lt;UITableViewDataSource, UITableViewDelegate&gt;</span></p>
<p><span>{</span></p>
<p><span> </span><span>NSMutableArray</span><span> *</span><span>computers</span><span>;</span></p>
<p><span>}</span></p>
<p><span>@property</span><span> (</span><span>nonatomic</span><span>, </span><span>retain</span><span>) </span><span>NSMutableArray</span><span> *</span><span>computers</span><span>;</span></p>
<p><span>@end</span></p>
<p><span><span> </span>Vamos ver um novo componente, o NSMutableArray. Este componente tem o mesmo comportamento do NSArray, porém este componente permite mutação, ou seja, conseguimos colocar praticamente qualquer tipo de informação neste array.</span></p>
<p><span><span> </span>No arquivo <strong>CellsViewController</strong>.<strong>m</strong> insira o seguinte código:</span></p>
<p><span>#import </span><span>&#8220;CellsViewController.h&#8221;</span></p>
<p><span>#import </span><span>&#8220;CustomCell.h&#8221;</span></p>
<p><span>#import </span><span>&#8220;CellsAppDelegate.h&#8221;</span></p>
<p><span>@implementation</span><span> CellsViewController</span></p>
<p><span>@synthesize</span><span> computers;</span></p>
<p><span>- (</span><span>void</span><span>)viewDidLoad {</span></p>
<p><span><span> </span></span><span>NSString</span><span> *path = [[</span><span>NSBundle</span><span> </span><span>mainBundle</span><span>] </span><span>pathForResource</span><span>:</span><span>@&#8221;Data&#8221;</span><span> </span><span>ofType</span><span>:</span><span>@&#8221;plist&#8221;</span><span>];</span></p>
<p><span><span> </span></span><span>self</span><span>.</span><span>computers</span><span> = [</span><span>NSMutableArray</span><span> </span><span>arrayWithContentsOfFile</span><span>:path];</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>void</span><span>)didReceiveMemoryWarning {</span></p>
<p><span><span> </span></span><span>// Releases the view if it doesn&#8217;t have a superview.</span></p>
<p><span> [</span><span>super</span><span> </span><span>didReceiveMemoryWarning</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>// Release any cached data, images, etc that aren&#8217;t in use.</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>void</span><span>)viewDidUnload {</span></p>
<p><span><span> </span></span><span>// Release any retained subviews of the main view.</span></p>
<p><span><span> </span></span><span>// e.g. self.myOutlet = nil;</span></p>
<p><span> </span><span>self</span><span>.</span><span>computers</span><span> = </span><span>nil</span><span>;</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>void</span><span>)dealloc {</span></p>
<p><span> [</span><span>computers</span><span> </span><span>release</span><span>];</span></p>
<p><span> [</span><span>super</span><span> </span><span>dealloc</span><span>];</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>NSInteger</span><span>)numberOfSectionsInTableView:(</span><span>UITableView</span><span> *)tableView</span></p>
<p><span>{</span></p>
<p><span><span> </span></span><span>return</span><span> </span><span>1</span><span>;</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>NSInteger</span><span>)tableView:(</span><span>UITableView</span><span> *)tableView numberOfRowsInSection:(</span><span>NSInteger</span><span>)section</span></p>
<p><span>{</span></p>
<p><span><span> </span></span><span>return</span><span> [</span><span>self</span><span>.</span><span>computers</span><span> </span><span>count</span><span>];</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>void</span><span>)tableView:(</span><span>UITableView</span><span> *)tableView didSelectRowAtIndexPath:(</span><span>NSIndexPath</span><span> *)indexPath</span></p>
<p><span>{</span></p>
<p><span><span> </span></span><span>// find the cell being touched and update its checked/unchecked image</span></p>
<p><span><span> </span></span><span>CustomCell</span><span> *targetCustomCell = (</span><span>CustomCell</span><span> *)[tableView </span><span>cellForRowAtIndexPath</span><span>:indexPath];</span></p>
<p><span><span> </span>[targetCustomCell </span><span>checkAction</span><span>:</span><span>nil</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>// don&#8217;t keep the table selection</span></p>
<p><span><span> </span>[tableView </span><span>deselectRowAtIndexPath</span><span>:indexPath </span><span>animated</span><span>:</span><span>YES</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>// update our data source array with the new checked state</span></p>
<p><span><span> </span></span><span>NSMutableDictionary</span><span> *selectedItem = [</span><span>self</span><span>.</span><span>computers</span><span> </span><span>objectAtIndex</span><span>:indexPath.</span><span>row</span><span>];</span></p>
<p><span><span> </span>[selectedItem </span><span>setObject</span><span>:[</span><span>NSNumber</span><span> </span><span>numberWithBool</span><span>:targetCustomCell.</span><span>checked</span><span>] </span><span>forKey</span><span>:</span><span>@&#8221;checked&#8221;</span><span>];</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>UITableViewCell</span><span> *)tableView:(</span><span>UITableView</span><span> *)tableView cellForRowAtIndexPath:(</span><span>NSIndexPath</span><span> *)indexPath</span></p>
<p><span>{</span></p>
<p><span><span> </span></span><span>static</span><span> </span><span>NSString</span><span> *kCustomCellID = </span><span>@&#8221;MyCellID&#8221;</span><span>;</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CustomCell</span><span> *cell = (</span><span>CustomCell</span><span> *)[tableView </span><span>dequeueReusableCellWithIdentifier</span><span>:kCustomCellID];</span></p>
<p><span><span> </span></span><span>if</span><span> (cell == </span><span>nil</span><span>)</span></p>
<p><span><span> </span>{</span></p>
<p><span><span> </span>cell = (</span><span>CustomCell</span><span> *)[[[</span><span>CustomCell</span><span> </span><span>alloc</span><span>] </span><span>initWithStyle</span><span>:</span><span>UITableViewCellStyleDefault</span><span> </span><span>reuseIdentifier</span><span>:kCustomCellID] autorelease];</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>NSDictionary</span><span> *item = [</span><span>computers</span><span> </span><span>objectAtIndex</span><span>:indexPath.</span><span>row</span><span>];</span></p>
<p><span><span> </span></span><span>NSString</span><span>* title = [item </span><span>objectForKey</span><span>:</span><span>@"text"</span><span>];</span></p>
<p><span><span> </span>cell.</span><span>title</span><span> = title;</span></p>
<p><span><span> </span>cell.textLabel.text = title;</span></p>
<p><span><span> </span>cell.</span><span>checked</span><span> = [[item </span><span>objectForKey</span><span>:</span><span>@"checked"</span><span>] </span><span>boolValue</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>return</span><span> cell;</span></p>
<p><span>}</span></p>
<p><span>- (</span><span>void</span><span>)tableView:(</span><span>UITableView</span><span> *)tableView accessoryButtonTappedForRowWithIndexPath:(</span><span>NSIndexPath</span><span> *)indexPath</span></p>
<p><span>{</span></p>
<p><span><span> </span></span><span>// called when the accessory view (disclosure button) is touched</span></p>
<p><span><span> </span></span><span>CustomCell</span><span> *cell = (</span><span>CustomCell</span><span> *)[tableView<span> </span></span><span>cellForRowAtIndexPath</span><span>:indexPath];<span> </span></span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CellsAppDelegate</span><span> *appDelegate = [</span><span>UIApplication</span><span> </span><span>sharedApplication</span><span>].delegate;</span></p>
<p><span><span> </span></span><span>NSDictionary</span><span> *infoDict = [</span><span>NSDictionary</span><span> </span><span>dictionaryWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span> cell.</span><span>title</span><span>, </span><span>@"text"</span><span>,</span></p>
<p><span><span> </span> [</span><span>NSNumber</span><span> </span><span>numberWithBool</span><span>:cell.</span><span>checked</span><span>], </span><span>@&#8221;checked&#8221;</span><span>,</span></p>
<p><span><span> </span> </span><span>nil</span><span>];</span></p>
<p><span><span> </span>[appDelegate showDetail:infoDict];</span></p>
<p><span>}</span></p>
<p><span>@end</span></p>
<p><span><span> </span>Observe o método viewDidLoad. Neste momento estamos populando nosso dicionário com o arquivo XML que criamos anteriormente. Alguns métodos vamos estudar no próximo tópico, quando vamos dar ações nas nossas células. Por enquanto compile e execute este código.</span></p>
<p><span><strong>Exercício</strong></span></p>
<ol>
<li><span>Modifique o projeto iReceita. Coloque a entrada de dados por meio de XML e modifique a configuração da célula e insira um botão que será para determinar a ação da mesma.</span></li>
</ol>
<p style="text-align: right;"><em>(@AdemarVarela)</em></p>
<p style="text-align: right;">
<p></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=395</wfw:commentRss>
		</item>
		<item>
		<title>Apostila iPhone - Table View - PList</title>
		<link>http://www.mindbike.com.br/blog/?p=390</link>
		<comments>http://www.mindbike.com.br/blog/?p=390#comments</comments>
		<pubDate>Fri, 03 Sep 2010 18:09:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mindbike]]></category>

		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[XCode]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=390</guid>
		<description><![CDATA[Acessando uma base de dados XML
 No nosso tópico anterior mostramos o uso do componente Table Views usando dados do tipo hardcode (quando os dados são inseridos diretamente no código). Agora vamos mostrar como acessar dados de um arquivo no formato XML. Inicialmente vamos incluir um arquivo XML no projeto.
 Selecione File / New File, [...]]]></description>
			<content:encoded><![CDATA[<p><span><strong>Acessando uma base de dados XML</strong></span></p>
<p><span><span> </span>No nosso tópico anterior mostramos o uso do componente Table Views usando dados do tipo hardcode (quando os dados são inseridos diretamente no código). Agora vamos mostrar como acessar dados de um arquivo no formato <strong>XML</strong>. Inicialmente vamos incluir um arquivo <strong>XML</strong> no projeto.</span></p>
<p><span><span> </span>Selecione <em>File</em> / New <em>File</em>, e escolha a opção <em>Other</em> e <em>Property List</em>.</span></p>
<p><img class="alignleft size-large wp-image-391" title="figura-53" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/09/figura-53-1024x640.png" alt="figura-53" width="614" height="384" /></p>
<p><span>Vamos chamar este arquivo de Data.plist. Estes passos irão criar um arquivo XML na pasta que você tiver selecionado antes de executar <em>File / New File / Other / Property List</em>. No caso vamos criar este arquivo na pasta <strong>Resource</strong>.</span></p>
<p><span><span> </span>Você deve estar lembrado que no projeto Cells, inserimos as informações diretamente no código, e fazemos isto no instante que a aplicação é inicializada, ou seja, implementamos no método <strong>viewDidLoad</strong>. Ainda continuamos com a necessidade de popular nossos dados no momento da inicialização da aplicação, mas agora vamos popular através do novo arquivo Data.plist.</span></p>
<p>Antes porém precisamos preparar nosso arquivo XML. Edite o arquivo Data.plist e digite o seguinte código:</p>
<p><span>&lt;?xml version=</span><span>&#8220;1.0&#8243;</span><span> encoding=</span><span>&#8220;UTF-8&#8243;</span><span>?&gt;</span></p>
<p><span>&lt;!DOCTYPE plist PUBLIC </span><span>&#8220;-//Apple Computer//DTD PLIST 1.0//EN&#8221;</span><span> </span><span>&#8220;<a href="http://www.apple.com/DTDs/PropertyList-1.0.dtd"><span>http://www.apple.com/DTDs/PropertyList-1.0.dtd</span></a>&#8220;</span><span>&gt;</span></p>
<p><span>&lt;plist </span><span>version</span><span>=</span><span>&#8220;1.0&#8243;</span><span>&gt;</span></p>
<p><span>&lt;array&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>Mac Pro</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;true/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>Mac Mini</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;false/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>iMac</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;false/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>MacBook</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;false/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>MacBook Pro</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;true/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>MacBook Air</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;false/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span>&lt;/array&gt;</span><span><span> </span></span></p>
<p><span>&lt;/plist&gt;</span></p>
<p><span><span> </span>Reparem que o esquema é praticamente o mesmo que implementamos anteriormente, temos tags para <strong>dict</strong>, <strong>key</strong>, <strong>string</strong> e <strong>array</strong>.</span></p>
<p><span><span> </span>Mas não veremos somente estas modificações. Vamos criar uma classe para tratar a célula que pretendemos apresentar. Vamos no nome do projeto e vamos criar um novo grupo no projeto. Usamos os grupos para separar as classes que criamos no projeto.</span></p>
<p><img class="alignleft size-large wp-image-393" title="figura-541" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/09/figura-541-1024x640.png" alt="figura-541" width="614" height="384" /></p>
<p><span>Selecione o projeto e em <em>Project</em> / <em>New Group</em>, vamos batizar este grupo de CustomCell. A partir de agora vamos implementar a classe CustomCell. Esta classe terá a configuração da célula que será apresentada ao usuário. Bom, agora vamos incluir a classe propriamente dita dentro do grupo CustomCell.</span></p>
<p style="text-align: right;"><em>(@AdemarVarela)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=390</wfw:commentRss>
		</item>
		<item>
		<title>Apostila iPhone - Table View / Custom Cell</title>
		<link>http://www.mindbike.com.br/blog/?p=387</link>
		<comments>http://www.mindbike.com.br/blog/?p=387#comments</comments>
		<pubDate>Wed, 01 Sep 2010 10:11:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[XCode]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=387</guid>
		<description><![CDATA[Implementando Cells
 Vamos agora implementar o código.
 No arquivo MainViewController.h, vamos inserir o seguinte código:
 #define kNameValueTag 1
 #define kColorValueTag 2
 @interface MainViewController : UIViewController  &#60;FlipsideViewControllerDelegate, UITableViewDataSource, UITableViewDelegate&#62;  {
 NSArray *computers;
 }
 @property (nonatomic, retain) NSArray *computers;
 
 @end
 O que observamos neste código acima? Reparem na linha em que declaramos a interface, [...]]]></description>
			<content:encoded><![CDATA[<p><span><strong>Implementando Cells</strong></span></p>
<p><span><span> </span>Vamos agora implementar o código.</span></p>
<p><span><span> </span>No arquivo MainViewController.h, vamos inserir o seguinte código:</span></p>
<p><span><span> </span>#define kNameValueTag </span><span>1</span></p>
<p><span><span> </span>#define kColorValueTag </span><span>2</span></p>
<p><span><span> </span></span><span>@interface</span><span> MainViewController : UIViewController <span> </span>&lt;FlipsideViewControllerDelegate, UITableViewDataSource, UITableViewDelegate&gt; <span> </span>{</span></p>
<p><span><span> </span></span><span>NSArray</span><span> *computers;</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span></span><span>@property</span><span> (</span><span>nonatomic</span><span>, </span><span>retain</span><span>) </span><span>NSArray</span><span> *computers;</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span>@end</span></p>
<p><span><span> </span>O que observamos neste código acima? Reparem na linha em que declaramos a interface, nela informamos quais são as delegações da classe. Para trabalharmos com Cells, nós precisamos haja uma delegação das classes <em>UITableViewDataSource</em> e <em>UITableViewDelegate</em>.</span></p>
<p><span><span> </span>Agora vamos para o <strong>MainViewController</strong>.<strong>m</strong>.</span></p>
<p><span><span> </span>Naturalmente que precisamos inicializar a variável <em>computers</em>:</span></p>
<p><span><span> </span></span><span>@implementation</span><span> MainViewController</span></p>
<p><span><span> </span></span><span>@synthesize</span><span> computers;</span></p>
<p><span><span> </span>Agora vamos entender que o nosso objetivo. A nossa proposta é apresentar uma lista com o nome de alguns computadores. </span></p>
<p>Por isso, vamos criar um array no momento que a nossa aplicação é inicializada.</p>
<p><span> <span> </span>- (</span><span>void</span><span>)viewDidLoad {</span></p>
<p><span><span> </span> <span> </span></span><span>NSDictionary</span><span> *row1 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;MacBook&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;White&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>NSDictionary</span><span> *row2 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;MacBook Pro&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;Silver&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>NSDictionary</span><span> *row3 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;iMac&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;White&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span></span><span>NSDictionary</span><span> *row4 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;Mac Mini&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;White&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>NSDictionary</span><span> *row5 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;Mac Pro&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;Silver&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>NSArray</span><span> *array = [[</span><span>NSArray</span><span> </span><span>alloc</span><span>] </span><span>initWithObjects</span><span>:row1, row2, row3, row4, row5, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>self</span><span>.</span><span>computers</span><span> = array;</span></p>
<p><span><span> </span> <span> </span>[row1 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[row2 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[row3 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[row4 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[row5 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[array </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[</span><span>super</span><span> </span><span>viewDidLoad</span><span>];</span></p>
<p><span> <span> </span>}</span></p>
<p><span><span> </span>Reparem que estamos usando uma nova instrução, a <em>NSDictionary</em>.</span></p>
<p><span><span> </span>Esta instrução serve para criar estruturas de dados, no nosso caso estamos montando cada linha da nossa lista.</span></p>
<p><span><span> </span>Como no IB nós delegamos o componente UITableView para File’s Owner, nós vamos precisar implementar dois métodos na nossa classe de controle, conforme segue:</span></p>
<p><span><span> </span>- (</span><span>NSInteger</span><span>)tableView:(</span><span>UITableView</span><span> *)tableView numberOfRowsInSection:(</span><span>NSInteger</span><span>)section {</span></p>
<p><span><span> </span></span><span>return</span><span> [</span><span>self</span><span>.computers </span><span>count</span><span>];</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span>Precisamos deste método para determinar qual a quantidade de linhas que a nossa tabela possui. Repare que estamos retornando a quantidade de elementos do <strong>array</strong> <em>computers</em> que foi carregada no momento do <strong>viewDidLoad</strong>.</span></p>
<p>Agora vamos terminar a implementação do Cells, escrevendo o seguinte método:</p>
<p><span>-(</span><span>UITableViewCell</span><span> *)tableView:(</span><span>UITableView</span><span> *)</span><span>tableView</span><span> cellForRowAtIndexPath:(</span><span>NSIndexPath</span><span> *)indexPath {</span></p>
<p><span><span> </span></span><span>static</span><span> </span><span>NSString</span><span> *CellTableIdentifier = </span><span>@&#8221;CellTableIdentifier &#8220;</span><span>;</span></p>
<p><span><span> </span></span><span>UITableViewCell</span><span> *cell = [</span><span>tableView</span><span> </span><span>dequeueReusableCellWithIdentifier</span><span>:CellTableIdentifier];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>if</span><span> (cell == </span><span>nil</span><span>) {</span></p>
<p><span>#ifdef __IPHONE_3_0__</span></p>
<p><span><span> </span>cell = [[[</span><span>UITableViewCell</span><span> </span><span>alloc</span><span>] </span><span>initWithStyle</span><span>:</span><span>UITableViewCellStyleDefault</span><span> </span><span>reuseIdentifier</span><span>: CellTableIdentifier] </span><span>autorelease</span><span>];</span></p>
<p><span>#else</span></p>
<p><span><span> </span>cell = [[[</span><span>UITableViewCell</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:</span><span>CGRectZero</span><span> </span><span>reuseIdentifier</span><span>:CellTableIdentifier] </span><span>autorelease</span><span>];</span></p>
<p><span>#endif</span></p>
<p><span><span> </span></span><span>CGRect</span><span> nameLabelRect = </span><span>CGRectMake</span><span>(</span><span>0</span><span>, </span><span>5</span><span>, </span><span>70</span><span>, </span><span>15</span><span>);</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *nameLabel = [[</span><span>UILabel</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:nameLabelRect];</span></p>
<p><span><span> </span>nameLabel.textAlignment = </span><span>UITextAlignmentRight</span><span>;</span></p>
<p><span><span> </span>nameLabel.text = </span><span>@&#8221;Name:&#8221;</span><span>;</span></p>
<p><span><span> </span>nameLabel.font = [</span><span>UIFont</span><span> </span><span>boldSystemFontOfSize</span><span>:</span><span>12</span><span>];</span></p>
<p><span><span> </span>[cell.contentView </span><span>addSubview</span><span>: nameLabel];</span></p>
<p><span><span> </span>[nameLabel </span><span>release</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CGRect</span><span> colorLabelRect = </span><span>CGRectMake</span><span>(</span><span>0</span><span>,</span><span>26</span><span>, </span><span>70</span><span>, </span><span>15</span><span>);</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *colorLabel = [[</span><span>UILabel</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:colorLabelRect];</span></p>
<p><span><span> </span>colorLabel.textAlignment = </span><span>UITextAlignmentRight</span><span>;</span></p>
<p><span><span> </span>colorLabel.text = </span><span>@&#8221;Color:&#8221;</span><span>;</span></p>
<p><span><span> </span>colorLabel.font = [</span><span>UIFont</span><span> </span><span>boldSystemFontOfSize</span><span>:</span><span>12</span><span>];</span></p>
<p><span><span> </span>[cell.contentView </span><span>addSubview</span><span>: colorLabel];</span></p>
<p><span><span> </span>[colorLabel </span><span>release</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CGRect</span><span> nameValueRect = </span><span>CGRectMake</span><span>(</span><span>80</span><span>, </span><span>5</span><span>, </span><span>200</span><span>, </span><span>15</span><span>);</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *nameValue = [[</span><span>UILabel</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:nameValueRect];</span></p>
<p><span><span> </span>nameValue.tag = </span><span>kNameValueTag</span><span>;</span></p>
<p><span><span> </span>[cell.contentView </span><span>addSubview</span><span>:nameValue];</span></p>
<p><span><span> </span>[nameValue </span><span>release</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CGRect</span><span> colorValueRect = </span><span>CGRectMake</span><span>(</span><span>80</span><span>, </span><span>25</span><span>, </span><span>200</span><span>, </span><span>15</span><span>);</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *colorValue = [[</span><span>UILabel</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:colorValueRect];</span></p>
<p><span><span> </span>colorValue.tag = </span><span>kColorValueTag</span><span>;</span></p>
<p><span><span> </span>[cell.contentView </span><span>addSubview</span><span>:colorValue];</span></p>
<p><span><span> </span>[colorValue </span><span>release</span><span>];</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span></span><span>NSUInteger</span><span> row = [indexPath </span><span>row</span><span>];</span></p>
<p><span><span> </span></span><span>NSDictionary</span><span> *rowData = [</span><span>self</span><span>.</span><span>computers</span><span> </span><span>objectAtIndex</span><span>:row];</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *name = (</span><span>UILabel</span><span> *)[cell.contentView </span><span>viewWithTag</span><span>:</span><span>kNameValueTag</span><span>];</span></p>
<p><span><span> </span>name.text = [rowData </span><span>objectForKey</span><span>:</span><span>@"Name"</span><span>];</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *color = (</span><span>UILabel</span><span> *)[cell.contentView </span><span>viewWithTag</span><span>:</span><span>kColorValueTag</span><span>];</span></p>
<p><span><span> </span>color.text = [rowData </span><span>objectForKey</span><span>:</span><span>@"Color"</span><span>];</span></p>
<p><span><span> </span></span><span>return</span><span> cell;</span></p>
<p><span>}</span></p>
<p>Reparem mais duas novas instruções para nós:</p>
<p>#ifdef, #else e <span> </span>#endif</p>
<p><span><span> </span>Estas instruções são executadas no momento da compilação, no nosso caso, no momento da compilação do código o compilador verifica se a variavél macro </span><span>__IPHONE_3_0__</span><span> está válida. </span></p>
<p><span><span> </span>Além desta intrução vimos a instrução CGRet. Esta instrução monta uma retângulo em torno de algumas informações, no nosso caso, cada informação do nosso array receberá um retângulo em torno.</span></p>
<p><strong>Exercício</strong></p>
<ol>
<li><span>Crie um projeto chamado iReceitas. Na tela Main View coloque um botão (que deverá habilitado com um componente Switch) que inicialize uma segunda view que tenha as seguintes linhas: “Bobó de Camarão”, “Canjiquinha”, “Feijoada”, “Polenta”, “Picanha” e “Frango Assado”.</span></li>
</ol>
<p style="text-align: right;"><em>(@AdemarVarela)</em></p>
<p style="text-align: right;">
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=387</wfw:commentRss>
		</item>
		<item>
		<title>Apostila iPhone - Table View - XML</title>
		<link>http://www.mindbike.com.br/blog/?p=382</link>
		<comments>http://www.mindbike.com.br/blog/?p=382#comments</comments>
		<pubDate>Sun, 29 Aug 2010 13:36:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[XCode]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=382</guid>
		<description><![CDATA[Acessando uma base de dados XML
 No nosso tópico anterior mostramos o uso do componente Table Views usando dados do tipo hardcode (quando os dados são inseridos diretamente no código). Agora vamos mostrar como acessar dados de um arquivo no formato XML. Inicialmente vamos incluir um arquivo XML no projeto.
 Selecione File / New File, [...]]]></description>
			<content:encoded><![CDATA[<p><span><strong>Acessando uma base de dados XML</strong></span></p>
<p><span><span> </span>No nosso tópico anterior mostramos o uso do componente Table Views usando dados do tipo hardcode (quando os dados são inseridos diretamente no código). Agora vamos mostrar como acessar dados de um arquivo no formato <strong>XML</strong>. Inicialmente vamos incluir um arquivo <strong>XML</strong> no projeto.</span></p>
<p><span><span> </span>Selecione <em>File</em> / New <em>File</em>, e escolha a opção <em>Other</em> e <em>Property List</em>.</span></p>
<div><img class="alignleft size-large wp-image-383" title="figura-53" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/08/figura-53-1024x640.png" alt="figura-53" width="645" height="403" /></div>
<div>
<p><span>Vamos chamar este arquivo de Data.plist. Estes passos irão criar um arquivo XML na pasta que você tiver selecionado antes de executar <em>File / New File / Other / Property List</em>. No caso vamos criar este arquivo na pasta <strong>Resource</strong>.</span></p>
<p><span><span> </span>Você deve estar lembrado que no projeto Cells, inserimos as informações diretamente no código, e fazemos isto no instante que a aplicação é inicializada, ou seja, implementamos no método <strong>viewDidLoad</strong>. Ainda continuamos com a necessidade de popular nossos dados no momento da inicialização da aplicação, mas agora vamos popular através do novo arquivo Data.plist.</span></p>
<p><span><span> </span>Antes porém precisamos preparar nosso arquivo XML. Edite o arquivo Data.plist e digite o seguinte código:</span></p>
<p><span>&lt;?xml version=</span><span>&#8220;1.0&#8243;</span><span> encoding=</span><span>&#8220;UTF-8&#8243;</span><span>?&gt;</span></p>
<p><span>&lt;!DOCTYPE plist PUBLIC </span><span>&#8220;-//Apple Computer//DTD PLIST 1.0//EN&#8221;</span><span> </span><span>&#8220;<a href="http://www.apple.com/DTDs/PropertyList-1.0.dtd"><span>http://www.apple.com/DTDs/PropertyList-1.0.dtd</span></a>&#8220;</span><span>&gt;</span></p>
<p><span>&lt;plist </span><span>version</span><span>=</span><span>&#8220;1.0&#8243;</span><span>&gt;</span></p>
<p><span>&lt;array&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>Mac Pro</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;true/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>Mac Mini</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;false/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>iMac</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;false/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>MacBook</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;false/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>MacBook Pro</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;true/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;dict&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>text</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;string&gt;</span><span>MacBook Air</span><span>&lt;/string&gt;</span></p>
<p><span><span> </span></span><span>&lt;key&gt;</span><span>checked</span><span>&lt;/key&gt;</span></p>
<p><span><span> </span></span><span>&lt;false/&gt;</span></p>
<p><span><span> </span></span><span>&lt;/dict&gt;</span></p>
<p><span>&lt;/array&gt;</span><span><span> </span></span></p>
<p><span>&lt;/plist&gt;</span></p>
<p><span><span> </span>Reparem que o esquema é praticamente o mesmo que implementamos anteriormente, temos tags para <strong>dict</strong>, <strong>key</strong>, <strong>string</strong> e <strong>array</strong>.</span></p>
<p><span><span> </span>Mas não veremos somente estas modificações. Vamos criar uma classe para tratar a célula que pretendemos apresentar. Vamos no nome do projeto e vamos criar um novo grupo no projeto. Usamos os grupos para separar as classes que criamos no projeto.</span></p>
<p><img class="alignleft size-large wp-image-384" title="figura-54" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/08/figura-54-1024x640.png" alt="figura-54" width="645" height="403" /></p>
<p><span>Selecione o projeto e em <em>Project</em> / <em>New Group</em>, vamos batizar este grupo de CustomCell. A partir de agora vamos implementar a classe CustomCell. Esta classe terá a configuração da célula que será apresentada ao usuário. Bom, agora vamos incluir a classe propriamente dita dentro do grupo CustomCell.</span></p>
<p style="text-align: right;"><em>(@AdemarVarela)</em></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=382</wfw:commentRss>
		</item>
		<item>
		<title>Twitter</title>
		<link>http://www.mindbike.com.br/blog/?p=379</link>
		<comments>http://www.mindbike.com.br/blog/?p=379#comments</comments>
		<pubDate>Sat, 28 Aug 2010 12:46:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[XCode]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=379</guid>
		<description><![CDATA[Pessoal,
Para facilitar e para acompanhar os avanços da tecnologia da comunicação, (rs), estou disponibilizando o meu twitter para vocês fazerem perguntas referentes a programação iPhone. Segue: @AdemarVarela
Abs
]]></description>
			<content:encoded><![CDATA[<p>Pessoal,</p>
<p>Para facilitar e para acompanhar os avanços da tecnologia da comunicação, (rs), estou disponibilizando o meu twitter para vocês fazerem perguntas referentes a programação iPhone. Segue: @AdemarVarela</p>
<p>Abs</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=379</wfw:commentRss>
		</item>
		<item>
		<title>Apostila iPhone - Table View</title>
		<link>http://www.mindbike.com.br/blog/?p=376</link>
		<comments>http://www.mindbike.com.br/blog/?p=376#comments</comments>
		<pubDate>Sat, 28 Aug 2010 12:45:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[XCode]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=376</guid>
		<description><![CDATA[Em algumas situações é necessário disponibilizar as informações para o usuário em forma de uma lista, e ainda quer permitir ao usuário efetuar alguma ação com esta informação. Para conseguir isso, é necessário montar uma tabela. O componente usado para isso é o Table View.
Inserindo uma Table View no IB
 Vamos abrir um novo projeto, [...]]]></description>
			<content:encoded><![CDATA[<p><span>Em algumas situações é necessário disponibilizar as informações para o usuário em forma de uma lista, e ainda quer permitir ao usuário efetuar alguma ação com esta informação. Para conseguir isso, é necessário montar uma tabela. O componente usado para isso é o Table View.</span></p>
<p><span><strong>Inserindo uma Table View no IB</strong></span></p>
<p><span><span> </span>Vamos abrir um novo projeto, vamos chama-lo de Cells. Guarde este projeto pois iremos usa-lo mais para frente. Dê um duplo click no arquivo MainView.xib</span></p>
<div><img class="alignleft size-large wp-image-377" title="figura-52" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/08/figura-52-1024x640.png" alt="figura-52" width="655" height="410" /></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div><span>Arraste o componente <strong>UITableView</strong> para a janela <strong>Main</strong> <strong>View</strong>.</span></div>
<div><span></p>
<p>Neste exemplo iremos aprender que alguns componentes não precisam ser declarados no XCode. Faremos apenas informar a delagação e o datasource da TableView. Com o botão control pressionado, de um click no componente, ao aparecer uma janela pop-up arraste a delegação e o datasource para <em>File’s</em> <em>Owner</em>.</p>
<p><span><span> </span>Feche o IB e vamos voltar para o XCode.</span></p>
<p><span><strong>Implementando Cells</strong></span></p>
<p><span><span> </span>Vamos agora implementar o código.</span></p>
<p><span><span> </span>No arquivo MainViewController.h, vamos inserir o seguinte código:</span></p>
<p><span><span> </span>#define kNameValueTag </span><span>1</span></p>
<p><span><span> </span>#define kColorValueTag </span><span>2</span></p>
<p><span><span> </span></span><span>@interface</span><span> MainViewController : UIViewController <span> </span>&lt;FlipsideViewControllerDelegate, UITableViewDataSource, UITableViewDelegate&gt; <span> </span>{</span></p>
<p><span><span> </span></span><span>NSArray</span><span> *computers;</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span></span><span>@property</span><span> (</span><span>nonatomic</span><span>, </span><span>retain</span><span>) </span><span>NSArray</span><span> *computers;</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span>@end</span></p>
<p><span><span> </span>O que observamos neste código acima? Reparem na linha em que declaramos a interface, nela informamos quais são as delegações da classe. Para trabalharmos com Cells, nós precisamos haja uma delegação das classes <em>UITableViewDataSource</em> e <em>UITableViewDelegate</em>.</span></p>
<p><span><span> </span>Agora vamos para o <strong>MainViewController</strong>.<strong>m</strong>.</span></p>
<p><span><span> </span>Naturalmente que precisamos inicializar a variável <em>computers</em>:</span></p>
<p><span><span> </span></span><span>@implementation</span><span> MainViewController</span></p>
<p><span><span> </span></span><span>@synthesize</span><span> computers;</span></p>
<p><span><span> </span>Agora vamos entender que o nosso objetivo. A nossa proposta é apresentar uma lista com o nome de alguns computadores. </span></p>
<p>Por isso, vamos criar um array no momento que a nossa aplicação é inicializada.</p>
<p><span> <span> </span>- (</span><span>void</span><span>)viewDidLoad {</span></p>
<p><span><span> </span> <span> </span></span><span>NSDictionary</span><span> *row1 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;MacBook&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;White&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>NSDictionary</span><span> *row2 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;MacBook Pro&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;Silver&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>NSDictionary</span><span> *row3 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;iMac&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;White&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span></span><span>NSDictionary</span><span> *row4 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;Mac Mini&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;White&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>NSDictionary</span><span> *row5 = [[</span><span>NSDictionary</span><span> </span><span>alloc</span><span>] </span><span>initWithObjectsAndKeys</span><span>:</span></p>
<p><span><span> </span></span><span>@&#8221;Mac Pro&#8221;</span><span>, </span><span>@&#8221;Name&#8221;</span><span>, </span><span>@&#8221;Silver&#8221;</span><span>, </span><span>@&#8221;Color&#8221;</span><span>, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>NSArray</span><span> *array = [[</span><span>NSArray</span><span> </span><span>alloc</span><span>] </span><span>initWithObjects</span><span>:row1, row2, row3, row4, row5, </span><span>nil</span><span>];</span></p>
<p><span><span> </span> <span> </span></span><span>self</span><span>.</span><span>computers</span><span> = array;</span></p>
<p><span><span> </span> <span> </span>[row1 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[row2 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[row3 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[row4 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[row5 </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[array </span><span>release</span><span>];</span></p>
<p><span><span> </span> <span> </span>[</span><span>super</span><span> </span><span>viewDidLoad</span><span>];</span></p>
<p><span> <span> </span>}</span></p>
<p><span><span> </span>Reparem que estamos usando uma nova instrução, a <em>NSDictionary</em>.</span></p>
<p><span><span> </span>Esta instrução serve para criar estruturas de dados, no nosso caso estamos montando cada linha da nossa lista.</span></p>
<p><span><span> </span>Como no IB nós delegamos o componente UITableView para File’s Owner, nós vamos precisar implementar dois métodos na nossa classe de controle, conforme segue:</span></p>
<p><span><span> </span>- (</span><span>NSInteger</span><span>)tableView:(</span><span>UITableView</span><span> *)tableView numberOfRowsInSection:(</span><span>NSInteger</span><span>)section {</span></p>
<p><span><span> </span></span><span>return</span><span> [</span><span>self</span><span>.computers </span><span>count</span><span>];</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span>Precisamos deste método para determinar qual a quantidade de linhas que a nossa tabela possui. Repare que estamos retornando a quantidade de elementos do <strong>array</strong> <em>computers</em> que foi carregada no momento do <strong>viewDidLoad</strong>.</span></p>
<p>Agora vamos terminar a implementação do Cells, escrevendo o seguinte método:</p>
<p><span>-(</span><span>UITableViewCell</span><span> *)tableView:(</span><span>UITableView</span><span> *)</span><span>tableView</span><span> cellForRowAtIndexPath:(</span><span>NSIndexPath</span><span> *)indexPath {</span></p>
<p><span><span> </span></span><span>static</span><span> </span><span>NSString</span><span> *CellTableIdentifier = </span><span>@&#8221;CellTableIdentifier &#8220;</span><span>;</span></p>
<p><span><span> </span></span><span>UITableViewCell</span><span> *cell = [</span><span>tableView</span><span> </span><span>dequeueReusableCellWithIdentifier</span><span>:CellTableIdentifier];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>if</span><span> (cell == </span><span>nil</span><span>) {</span></p>
<p><span>#ifdef __IPHONE_3_0__</span></p>
<p><span><span> </span>cell = [[[</span><span>UITableViewCell</span><span> </span><span>alloc</span><span>] </span><span>initWithStyle</span><span>:</span><span>UITableViewCellStyleDefault</span><span> </span><span>reuseIdentifier</span><span>: CellTableIdentifier] </span><span>autorelease</span><span>];</span></p>
<p><span>#else</span></p>
<p><span><span> </span>cell = [[[</span><span>UITableViewCell</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:</span><span>CGRectZero</span><span> </span><span>reuseIdentifier</span><span>:CellTableIdentifier] </span><span>autorelease</span><span>];</span></p>
<p><span>#endif</span></p>
<p><span><span> </span></span><span>CGRect</span><span> nameLabelRect = </span><span>CGRectMake</span><span>(</span><span>0</span><span>, </span><span>5</span><span>, </span><span>70</span><span>, </span><span>15</span><span>);</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *nameLabel = [[</span><span>UILabel</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:nameLabelRect];</span></p>
<p><span><span> </span>nameLabel.textAlignment = </span><span>UITextAlignmentRight</span><span>;</span></p>
<p><span><span> </span>nameLabel.text = </span><span>@&#8221;Name:&#8221;</span><span>;</span></p>
<p><span><span> </span>nameLabel.font = [</span><span>UIFont</span><span> </span><span>boldSystemFontOfSize</span><span>:</span><span>12</span><span>];</span></p>
<p><span><span> </span>[cell.contentView </span><span>addSubview</span><span>: nameLabel];</span></p>
<p><span><span> </span>[nameLabel </span><span>release</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CGRect</span><span> colorLabelRect = </span><span>CGRectMake</span><span>(</span><span>0</span><span>,</span><span>26</span><span>, </span><span>70</span><span>, </span><span>15</span><span>);</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *colorLabel = [[</span><span>UILabel</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:colorLabelRect];</span></p>
<p><span><span> </span>colorLabel.textAlignment = </span><span>UITextAlignmentRight</span><span>;</span></p>
<p><span><span> </span>colorLabel.text = </span><span>@&#8221;Color:&#8221;</span><span>;</span></p>
<p><span><span> </span>colorLabel.font = [</span><span>UIFont</span><span> </span><span>boldSystemFontOfSize</span><span>:</span><span>12</span><span>];</span></p>
<p><span><span> </span>[cell.contentView </span><span>addSubview</span><span>: colorLabel];</span></p>
<p><span><span> </span>[colorLabel </span><span>release</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CGRect</span><span> nameValueRect = </span><span>CGRectMake</span><span>(</span><span>80</span><span>, </span><span>5</span><span>, </span><span>200</span><span>, </span><span>15</span><span>);</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *nameValue = [[</span><span>UILabel</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:nameValueRect];</span></p>
<p><span><span> </span>nameValue.tag = </span><span>kNameValueTag</span><span>;</span></p>
<p><span><span> </span>[cell.contentView </span><span>addSubview</span><span>:nameValue];</span></p>
<p><span><span> </span>[nameValue </span><span>release</span><span>];</span></p>
<p><span><span> </span></span></p>
<p><span><span> </span></span><span>CGRect</span><span> colorValueRect = </span><span>CGRectMake</span><span>(</span><span>80</span><span>, </span><span>25</span><span>, </span><span>200</span><span>, </span><span>15</span><span>);</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *colorValue = [[</span><span>UILabel</span><span> </span><span>alloc</span><span>] </span><span>initWithFrame</span><span>:colorValueRect];</span></p>
<p><span><span> </span>colorValue.tag = </span><span>kColorValueTag</span><span>;</span></p>
<p><span><span> </span>[cell.contentView </span><span>addSubview</span><span>:colorValue];</span></p>
<p><span><span> </span>[colorValue </span><span>release</span><span>];</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span></span><span>NSUInteger</span><span> row = [indexPath </span><span>row</span><span>];</span></p>
<p><span><span> </span></span><span>NSDictionary</span><span> *rowData = [</span><span>self</span><span>.</span><span>computers</span><span> </span><span>objectAtIndex</span><span>:row];</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *name = (</span><span>UILabel</span><span> *)[cell.contentView </span><span>viewWithTag</span><span>:</span><span>kNameValueTag</span><span>];</span></p>
<p><span><span> </span>name.text = [rowData </span><span>objectForKey</span><span>:</span><span>@"Name"</span><span>];</span></p>
<p><span><span> </span></span><span>UILabel</span><span> *color = (</span><span>UILabel</span><span> *)[cell.contentView </span><span>viewWithTag</span><span>:</span><span>kColorValueTag</span><span>];</span></p>
<p><span><span> </span>color.text = [rowData </span><span>objectForKey</span><span>:</span><span>@"Color"</span><span>];</span></p>
<p><span><span> </span></span><span>return</span><span> cell;</span></p>
<p><span>}</span></p>
<p><span><span> </span>Reparem mais duas novas instruções para nós:</span></p>
<p><span><span> </span>#ifdef, #else e <span> </span>#endif</span></p>
<p><span><span> </span>Estas instruções são executadas no momento da compilação, no nosso caso, no momento da compilação do código o compilador verifica se a variavél macro </span><span>__IPHONE_3_0__</span><span> está válida. </span></p>
<p><span><span> </span>Além desta intrução vimos a instrução CGRet. Esta instrução monta uma retângulo em torno de algumas informações, no nosso caso, cada informação do nosso array receberá um retângulo em torno.</span></p>
<p><strong>Exercício</strong></p>
<ol>
<li><span>Crie um projeto chamado iReceitas. Na tela Main View coloque um botão (que deverá habilitado com um componente Switch) que inicialize uma segunda view que tenha as seguintes linhas: “Bobó de Camarão”, “Canjiquinha”, “Feijoada”, “Polenta”, “Picanha” e “Frango Assado”.</span></li>
</ol>
<p></span></div>
<p style="text-align: right;"><em>(by Ademar Varela)</em></p>
<p style="text-align: right;"><em>(@AdemarVarela)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=376</wfw:commentRss>
		</item>
		<item>
		<title>Apostila iPhone - Switch</title>
		<link>http://www.mindbike.com.br/blog/?p=372</link>
		<comments>http://www.mindbike.com.br/blog/?p=372#comments</comments>
		<pubDate>Fri, 30 Jul 2010 01:24:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Mindbike]]></category>

		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=372</guid>
		<description><![CDATA[ Outro componente que só existe no iPhone é o UISwitch.
 Este componente é utilizado para determinarmos se uma determinada situação está ativa ou não (ON/OFF).
Declarando Switch no IB
 Abra o projeto iPhoneHello e abra o IB pelo MainView.xib
 Na janela Library selecione UISwitch em Inputs &#38; Values e arraste até a Main View.

Agora que [...]]]></description>
			<content:encoded><![CDATA[<p><span><span> </span>Outro componente que só existe no iPhone é o UISwitch.</span></p>
<p><span><span> </span>Este componente é utilizado para determinarmos se uma determinada situação está ativa ou não (ON/OFF).</span></p>
<p><span><strong>Declarando Switch no IB</strong></span></p>
<p><span><span> </span>Abra o projeto <strong>iPhoneHello</strong> e abra o <strong>IB</strong> pelo <strong>MainView</strong>.<strong>xib</strong></span></p>
<p><span><span> </span>Na janela <em>Library</em> selecione <em>UISwitch</em> em <em>Inputs</em> <em>&amp;</em> <em>Values</em> e arraste até a <strong>Main</strong> <strong>View</strong>.</span></p>
<p><img class="alignleft size-large wp-image-373" title="figura-51" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/07/figura-51-1024x640.png" alt="figura-51" width="614" height="384" /></p>
<p><span>Agora que já deixamos o componente do jeito desejado, vamos fechar o IB e retornar para o XCode.</span></p>
<p><span><strong>Inserindo Switch no XCode</strong></span></p>
<p><span><span> </span>Como já foi mencionado, não vamos nos estender mais sobre as declarações do componente no XCode, você já sabe que precisa declarar o componente, definir suas propriedades e inicializa-lo, certo?</span></p>
<p><span><strong>Inserindo a ação do Switch</strong></span></p>
<p><span><span> </span>A idéia da nossa ação é similar ao tópico anterior, quando este componete estiver ON o componente Picker View estará visível, quando OFF ficará invisível.</span></p>
<p><span><span> </span>Vamos até o MainViewController.h e vamos declarar a ação:</span></p>
<p><span><span> </span>- (IBAction)toggleSwitch:(id)sender;</span></p>
<p><span><span> </span>e agora vamos até MainViewController.m e implementamos a ação:</span></p>
<p><span><span> </span>- (</span><span>IBAction</span><span>)toggleSwitch:(</span><span>id</span><span>)sender{</span></p>
<p><span><span> </span></span><span>UISwitch</span><span> *whichSwitch = (</span><span>UISwitch</span><span> *)sender;</span></p>
<p><span><span> </span></span><span>BOOL</span><span> setting = whichSwitch.isOn;</span></p>
<p><span><span> </span>[</span><span>viewComponentSwitch</span><span> </span><span>setOn</span><span>:setting </span><span>animated</span><span>:</span><span>YES</span><span>];</span></p>
<p><span><span> </span></span><span>if</span><span> (setting == </span><span>YES</span><span>) {</span></p>
<p><span><span> </span>[</span><span>dataPicker</span><span> </span><span>setHidden</span><span>:</span><span>NO</span><span>];</span></p>
<p><span><span> </span>} </span><span>else</span><span> {</span></p>
<p><span><span> </span>[</span><span>dataPicker</span><span> </span><span>setHidden</span><span>:</span><span>YES</span><span>];</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span>}</span></p>
<p><span><span> </span>Agora compile o código, confira todos os relacionamentos e execute.</span></p>
<p style="text-align: right;"><em>(by Ademar Varela)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=372</wfw:commentRss>
		</item>
		<item>
		<title>Apostila iPhone - Codificando Segmented Control</title>
		<link>http://www.mindbike.com.br/blog/?p=370</link>
		<comments>http://www.mindbike.com.br/blog/?p=370#comments</comments>
		<pubDate>Sun, 13 Jun 2010 23:49:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=370</guid>
		<description><![CDATA[Criando uma ação para o Segmented Control
 Para começar vamos definir uma variável que irá determinar o primeiro índice deste componente, no arquivo MainViewController.h:
 #define KShowSegmentIndex 0
 Vamos utilizar esta definição para definir a ação que será tomada no momento que desejarmos exibir ou inibir o componente Picker View.
 Toda vez que tivermos trabalhando com [...]]]></description>
			<content:encoded><![CDATA[<p><span><strong>Criando uma ação para o Segmented Control</strong></span></p>
<p><span><span> </span>Para começar vamos definir uma variável que irá determinar o primeiro índice deste componente, no arquivo MainViewController.h:</span></p>
<p><span> </span><em>#define KShowSegmentIndex 0</em></p>
<p><span><span> </span>Vamos utilizar esta definição para definir a ação que será tomada no momento que desejarmos exibir ou inibir o componente Picker View.</span></p>
<p><span><span> </span>Toda vez que tivermos trabalhando com um componente de multipla escolha, é comum criarmos uma ação com o nome de toggle, no caso vamos criar uma com o nome de toggleShowHide. Em MainViewController.h:</span></p>
<p><span> </span><em>- (IBAction)toggleShowHide:(id)Sender;</em></p>
<p><span><span> </span>Agora vamos em MainViewController.m:</span></p>
<p><span> </span><em>- (IBAction)toggleShowHide:(id)Sender {</em></p>
<p><span><em> </em></span><em>NSInteger segment = segControl.selectedSegmentIndex;</em></p>
<p><span><em> </em></span><em>if (segment == KShowSegmentIndex) {</em></p>
<p><span><em> </em></span><em>[dataPicker setHidden:NO];</em></p>
<p><span><em> </em></span><em>} else {</em></p>
<p><span><em> </em></span><em>[dataPicker setHidden:YES];</em></p>
<p><span><em> </em></span><em>}</em></p>
<p><span><em> </em></span><em>}</em></p>
<p><span><span> </span>Para entendermos melhor, segControl é a declaração do UISegmentControl que eu declarei no MainViewController.h e dataPicker é a declaração do Picker View.</span></p>
<p><span><span> </span>Certifique-se que todos os componentes estão declarado e relacionados com o IB.</span></p>
<p><span><span> </span>Execute o código.</span></p>
<p><span>Exercício</span></p>
<ol>
<li><span>No projeto iPicker, crie uma nova view e insira um componente Picker View com somente uma coluna com os seguintes elementos: Campinas, Santos, Ribeirão Preto, São Vicente, Guarujá e Indaiatuba. Na view principal insira um SegmentedControl. A primeira opção apresentará o Picker View dos Estados e a segunda a de Cidades.</span></li>
</ol>
<p style="text-align: right;"><em>(by Ademar Varela)</em></p>
<p style="text-align: right;">
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=370</wfw:commentRss>
		</item>
		<item>
		<title>Apostila iPhone - Segmented Control</title>
		<link>http://www.mindbike.com.br/blog/?p=366</link>
		<comments>http://www.mindbike.com.br/blog/?p=366#comments</comments>
		<pubDate>Sat, 05 Jun 2010 13:26:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=366</guid>
		<description><![CDATA[ Este componente é outro que só existe no iPhone SDK. Ele tem um equivalente, mas não igual, no ambiente Desk que é o componene Tab. O funcionamento deste componente é similar ao Tab, ele executa alguma ação na medida que você seleciona um botão, ou seja, as ações estão segmentadas e dependem da execução [...]]]></description>
			<content:encoded><![CDATA[<p><span><span> </span>Este componente é outro que só existe no iPhone SDK. Ele tem um equivalente, mas não igual, no ambiente Desk que é o componene Tab. O funcionamento deste componente é similar ao Tab, ele executa alguma ação na medida que você seleciona um botão, ou seja, as ações estão segmentadas e dependem da execução dos botões para serem executados.</span></p>
<p><span><strong>Inserindo um Segmented Control no IB</strong></span></p>
<p><span><span> </span>Abra o projeto <strong>iPhoneHello</strong>, e abra o <strong>MainView</strong>.<strong>xib</strong>.</span></p>
<p><span><span> </span>Na janela <em>Libray</em> selecione <em>Input</em> <em>&amp;</em> <em>Values</em> e arraste o componente <strong>UISegmentedControl</strong> para a <strong>Main</strong> <strong>View</strong>.</span></p>
<p><img class="alignleft size-large wp-image-367" title="figura-49" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/06/figura-49-1024x640.png" alt="figura-49" width="614" height="384" /></p>
<p><span>Após inserir o componente vamos configura-lo.</span></p>
<p><span><span> </span>Em atributos da janela <strong>Inspector</strong>, selecione <em>Style</em> com a opção <em>Bar.</em></span></p>
<p><span><em><span> </span></em>No atributo <em>Segment 0</em>, atribua “Apresenta” para o item <em>Title</em> e em <em>Segment 1</em>, atribua “Esconde” para o item <em>Title</em>.</span></p>
<p><span><img class="alignleft size-large wp-image-368" title="figura-50" src="http://www.mindbike.com.br/blog/wp-content/uploads/2010/06/figura-50-1024x640.png" alt="figura-50" width="614" height="384" /><br />
</span></p>
<div></div>
<p><span>Agora que já deixamos o componente do jeito desejado, vamos fechar o IB e retornar para o XCode.</span></p>
<p><span><strong>Inserindo Segmented Control no XCode</strong></span></p>
<p><span><span> </span>Não vou me estender sobre como declarar componentes no XCode, já sabemos como fazer isso, declarar componente, definir propriedades e inicializa-lo. Este é só um lembrete.</span></p>
<p><span><span> </span>Para entender o funcionamento deste componente vamos determinar uma ação para o momento em que o usuário pressionar o botão “Apresentar” e o “Esconder”. Na verdade, vamos definir que quando o usuário escolher “Apresentar” vamos exibir o Picker View que fizemos anteriormente, e quando o usuário pressionar “Esconder” vamos inibir o componente Picker View.</span></p>
<div style="text-align: right;"><em>(by Ademar Varela)</em></div>
<div style="text-align: right;"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=366</wfw:commentRss>
		</item>
		<item>
		<title>Apostila iPhone - Manipulando um Picker View</title>
		<link>http://www.mindbike.com.br/blog/?p=364</link>
		<comments>http://www.mindbike.com.br/blog/?p=364#comments</comments>
		<pubDate>Sat, 05 Jun 2010 13:22:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.mindbike.com.br/blog/?p=364</guid>
		<description><![CDATA[Podemos manipular a seleção feita pelo usuário, para isso vamos modificar o método showHello.
 NSInteger row = [dataPicker selectedRowInComponent:0];
 NSString *selected = [dataElementos objectAtIndex:row];
 lblHello.text = selected;

Exercício

Crie um projeto chamado iPicker. Crie um Picker View com todos os estados do Brasil, crie um botão que quando pressionado exiba o conteúdo selecionado no Picker View.


(by Ademar [...]]]></description>
			<content:encoded><![CDATA[<p><span>Podemos manipular a seleção feita pelo usuário, para isso vamos modificar o método showHello.</span></p>
<p><span> </span><em>NSInteger row = [dataPicker selectedRowInComponent:0];</em></p>
<p><span><em> </em></span><em>NSString *selected = [dataElementos objectAtIndex:row];</em></p>
<p><span><em> </em></span><em>lblHello.text = selected;</em></p>
<div>
<p><span><strong>Exercício</strong></span></p>
<ol>
<li><span>Crie um projeto chamado iPicker. Crie um Picker View com todos os estados do Brasil, crie um botão que quando pressionado exiba o conteúdo selecionado no Picker View.</span></li>
</ol>
</div>
<p style="text-align: right;"><em>(by Ademar Varela)</em></p>
<p style="text-align: right;">
]]></content:encoded>
			<wfw:commentRss>http://www.mindbike.com.br/blog/?feed=rss2&amp;p=364</wfw:commentRss>
		</item>
	</channel>
</rss>
