<?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>Dawid Pośliński</title>
	<atom:link href="http://blog.poslinski.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.poslinski.net</link>
	<description>Code is poetry.</description>
	<lastBuildDate>Sun, 27 Feb 2011 11:30:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Rendez-vous z Microsoft</title>
		<link>http://blog.poslinski.net/rendez-vous-z-microsoft/</link>
		<comments>http://blog.poslinski.net/rendez-vous-z-microsoft/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 11:30:42 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[tworzenie gier]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=682</guid>
		<description><![CDATA[Jakiś czas temu, na prośbę ludzi z Microsoftu, zabrałem się za pisanie artykułów. Miło mi poinformować, że udało się sfinalizować tworzenie części serii tekstów, które będą stanowić wprowadzenie, do tworzenia gier z wykorzystaniem Microsoft XNA. Osobom, które są zainteresowane kolejnymi artykułami, nie mogę obiecać konkretnego terminu publikacji, ze względu na duży natłok obowiązków, jednak zachęcam [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.poslinski.net/wp-content/uploads/2011/02/randez-vous-z-microsoft.png"><img class="size-full wp-image-687 aligncenter" title="randez-vous-z-microsoft" src="http://blog.poslinski.net/wp-content/uploads/2011/02/randez-vous-z-microsoft.png" alt="" width="620" height="150" /></a></p>
<p>Jakiś czas temu, na prośbę ludzi z Microsoftu, zabrałem się za pisanie artykułów. Miło mi poinformować, że udało się sfinalizować tworzenie części serii tekstów, które będą stanowić wprowadzenie, do tworzenia gier z wykorzystaniem Microsoft XNA.</p>
<p>Osobom, które są zainteresowane kolejnymi artykułami, nie mogę obiecać konkretnego terminu publikacji, ze względu na duży natłok obowiązków, jednak zachęcam do odwiedzania <a href="http://msdn.microsoft.com/pl-pl/centrum-xna">centrum</a> i wspólnego budowania polskiej sceny XNA.</p>
<p><span id="more-682"></span>Obecnie dostępne artykuły:</p>
<ol>
<li><a href="http://msdn.microsoft.com/pl-pl/library/co-to-jest-microsoft-xna" target="_blank">Co to jest Microsoft XNA?</a></li>
<li><a href="http://msdn.microsoft.com/pl-pl/library/przygotowanie-srodowiska-pracy" target="_blank">Przygotowanie środowiska pracy</a></li>
<li><a href="http://msdn.microsoft.com/pl-pl/library/Tworzenie-projektu" target="_blank">Tworzenie projektu</a></li>
<li><a href="http://msdn.microsoft.com/pl-pl/library/wstep-do-grafiki-2d-3d" target="_blank">Wstęp do grafiki 2d/3d</a></li>
</ol>
<p>Spis całej zawartości, która jest zaplanowana, znajduje się <a href="http://msdn.microsoft.com/pl-pl/library/tworzenie-gier-na-platformach-microsoft" target="_blank">tutaj</a>.</p>
<p>Źrodło screena: <a href="http://www.flickr.com/photos/cloudsoup/3830513599/" target="_blank">link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/rendez-vous-z-microsoft/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yii: Mechanizm sesji</title>
		<link>http://blog.poslinski.net/yii-mechanizm-sesji/</link>
		<comments>http://blog.poslinski.net/yii-mechanizm-sesji/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 05:03:08 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[sesja]]></category>
		<category><![CDATA[yii framework]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=677</guid>
		<description><![CDATA[Normalnie w PHP do przechowywania danych związanych z sesją, używa się tablicy globalnej $_SESSION. Okazuje się jednak, że w przypadku frameworka Yii, do sesji odwołuje się w nieco inny sposób. Klasyczne przypisanie wartości do tej tablicy nic nie da, albowiem zostanie ona nadpisana przez Yii jego zawartością. Twórcy tego framework&#8217;a przyjęli, zresztą słusznie, że najlepszą [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://blog.poslinski.net/wp-content/uploads/2010/12/yii-framework-session.png"><img class="size-full wp-image-678 aligncenter" title="yii-framework-session" src="http://blog.poslinski.net/wp-content/uploads/2010/12/yii-framework-session.png" alt="" width="620" height="150" /></a>Normalnie w PHP do przechowywania danych związanych z sesją, używa się tablicy globalnej <strong>$_SESSION</strong>. Okazuje się jednak, że w przypadku frameworka Yii, do sesji odwołuje się w nieco inny sposób.</p>
<p><span id="more-677"></span>Klasyczne przypisanie wartości do tej tablicy nic nie da, albowiem zostanie ona nadpisana przez Yii jego zawartością. Twórcy tego framework&#8217;a przyjęli, zresztą słusznie, że najlepszą alternatywą, będzie przechowywanie sesji w bazie danych.</p>
<h2>Instalacja</h2>
<p>Aby rozpocząć pracę z sesją, należy korzystać z dowolnego mechanizmu składowania danych używanego przez Yii , następnie w głównym pliku konfiguracyjnym, jako jeden z elementów, dodać następujący fragment kodu:</p>
<pre class="php">session'=&gt;array(
            'class' =&gt; 'CDbHttpSession',
            'connectionID' =&gt; 'db',
            'sessionTableName' =&gt; 'dbsession',
        ),
</pre>
<p>Gotowe! Framwork samodzielnie utworzy niezbędną tabelę &#8216;dbsession&#8217; w bazie danych, do której prowadzi połączenie, którego ID podano w konfiguracji.</p>
<h2>Jak używać?</h2>
<p>Od tego momentu, tablica z sesją dostępna jest przez wywołanie <strong>Yii::app()-&gt;session</strong>. Ponieważ dostępny jest zarówno setter jak i getter, do dowolnego elementu możemy odwoływać się przez klucz: <strong>Yii::app()-&gt;session['klucz']</strong>, oraz przypisywać dowolną wartość: <strong>Yii::app()-&gt;session['klucz'] = &#8222;wartość&#8221;</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/yii-mechanizm-sesji/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Yii: Srbac po polsku</title>
		<link>http://blog.poslinski.net/yii-srbac-po-polsku/</link>
		<comments>http://blog.poslinski.net/yii-srbac-po-polsku/#comments</comments>
		<pubDate>Sun, 26 Dec 2010 15:51:10 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[srbac]]></category>
		<category><![CDATA[Święta]]></category>
		<category><![CDATA[tłumaczenie]]></category>
		<category><![CDATA[yii framework]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=657</guid>
		<description><![CDATA[Z okazji Świąt Bożego Narodzenia, a także Nowego Roku, nie tylko chce złożyć życzenia, spokojnych, dostatnich, smacznych dni spędzonych z najbliższą rodziną i przyjaciółmi, ale także sprezentować mały prezent. Zdaje sobie sprawę, że przyda się on jedynie osobom, które programują w php z wykorzystaniem frameworka Yii, ale mimo to, zawsze komuś zaoszczędzi troszkę czasu, który musiał [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/12/yiiframework-polski-srbac.jpg"><img class="size-full wp-image-664 aligncenter" title="yiiframework-polski-srbac" src="http://blog.poslinski.net/wp-content/uploads/2010/12/yiiframework-polski-srbac.jpg" alt="" width="620" height="150" /></a>Z okazji Świąt Bożego Narodzenia, a także Nowego Roku, nie tylko chce złożyć życzenia, spokojnych, dostatnich, smacznych dni spędzonych z najbliższą rodziną i przyjaciółmi, ale także sprezentować mały prezent.<br />
Zdaje sobie sprawę, że przyda się on jedynie osobom, które programują w <strong>php</strong> z wykorzystaniem <strong>frameworka Yii</strong>, ale mimo to, zawsze komuś zaoszczędzi troszkę czasu, który musiał by poświęcić na samodzielne tłumaczenie.<span id="more-657"></span></p>
<h2 style="text-align: justify;">Co to jest Srbac?</h2>
<p style="text-align: justify;">Srbac to gotowy moduł do Yii, który pozwala w wygodny i kompleksowy sposób zarządzać uprawnieniami w tym <strong>frameworku</strong>.</p>
<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/12/srbac.zip">Pobierz polskie tłumaczenie Srbac 1.1.1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/yii-srbac-po-polsku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wzorzec fabryki w objective-c</title>
		<link>http://blog.poslinski.net/wzorzec-fabryki-w-objective-c/</link>
		<comments>http://blog.poslinski.net/wzorzec-fabryki-w-objective-c/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 19:17:47 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[fabryka]]></category>
		<category><![CDATA[factory]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[wzorce projektowe]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=649</guid>
		<description><![CDATA[Wzorce projektowe mają zarówno narzucać pewien schemat działania programisty, podczas wytwarzania kodu aplikacji, jak również ułatwiać mu życie. W tym wpisie, przedstawię moją uproszczoną wersje implementacji wzorca Fabryki &#8211; Factory na przykładzie Objective-C. Factory.h #import @interface Factory : NSObject { NSMutableDictionary *variable; } +(id)init; +(void)setVar:(id)vari forKey:key; +(id)getVar:(id)key; +(void)removeVar:(id)key; @end Factory.m #import "Factory.h" @implementation Factory static [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/12/objective-c-factory-wzorzec.png"><img src="http://blog.poslinski.net/wp-content/uploads/2010/12/objective-c-factory-wzorzec.png" alt="" title="objective-c-factory-wzorzec" width="620" height="150" class="aligncenter size-full wp-image-652" /></a>Wzorce projektowe mają zarówno narzucać pewien schemat działania programisty, podczas wytwarzania kodu aplikacji, jak również ułatwiać mu życie. W tym wpisie, przedstawię moją uproszczoną wersje implementacji wzorca Fabryki &#8211; Factory na przykładzie Objective-C.<span id="more-649"></span></p>
<h2>Factory.h</h2>
<pre name="code" class="objective-c">
#import <Foundation/Foundation.h>

@interface Factory : NSObject {
	NSMutableDictionary *variable;
}

+(id)init;
+(void)setVar:(id)vari forKey:key;
+(id)getVar:(id)key;
+(void)removeVar:(id)key;

@end
</pre>
<h2>Factory.m</h2>
<pre name="code" class="objective-c">
#import "Factory.h"

@implementation Factory

static NSMutableDictionary *variable = nil;

+(id)init {
	if (!variable)
        variable = [[NSMutableDictionary alloc] init];
	return self;
}

+(void)setVar:(id)vari forKey:(id)key {
	if ( [variable objectForKey:(id)key] != nil )
		[self removeVar:(id)key];

	[variable setObject:(id)vari forKey:(id)key];
}

+(id)getVar:(id)key {
	return [variable objectForKey:(id)key];
}

+(void)removeVar:(id)key {
	if ( [variable objectForKey:(id)key] != nil ) {
		[variable removeObjectForKey:(id)key];
	}
}

@end
</pre>
<h2>Instalacja</h2>
<ol>
<li>W pliku <strong>nazwa_aplikacji_prefix.pch</strong>, który jest dołączany na początku każdego pliku z kodem aplikacji, dodajemy <strong>#import &#8222;Factory.h&#8221;</strong>.</li>
<li>W metodzie <strong>(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions</strong>, dodajemy na początku <strong>[Factory init]</strong>.</li>
</ol>
<h2>Sposób użycia</h2>
<ul>
<li>Dodajemy do fabryki obiekty za pomocą metody <strong>[Factory setVar:(id)NaszObiekt forKey:@"naszKlucz"];</strong></li>
<li>Pobieramy obiekt z fabryki za pomocą metody <strong>[Factory getVar:@"naszKlucz"];</strong></li>
<li>Usuwamy obiekt z rejestru za pomocą metody <strong>[Factory removeVar:@"naszKlucz"];</strong></li>
</ul>
<p>Foto: <a href="http://www.flickr.com/photos/archetypefotografie/4746308940/" target="_blank">Flickr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/wzorzec-fabryki-w-objective-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iPhone: % (procent) w NSString</title>
		<link>http://blog.poslinski.net/iphone-procent-w-nsstring/</link>
		<comments>http://blog.poslinski.net/iphone-procent-w-nsstring/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 19:27:35 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[nsstring]]></category>
		<category><![CDATA[procent]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=644</guid>
		<description><![CDATA[Jak zrobić znak procenta w NSString? Wprowadzenie samego % spowoduje, że NSString spróbuje go przetworzyć, ale będzie oczekiwał jakiegoś znaku &#8222;po&#8221;, który pozwoli mu określić typ. Ponieważ żadnego nie znajdzie, nie wyświetli żadnego znaku w danym miejscu. Specjalnie do tego zadania przygotowano zatem znak %%, który rozwiązuje problem.]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/11/nsstring-i-procent.png"><img class="aligncenter size-full wp-image-645" title="nsstring-i-procent" src="http://blog.poslinski.net/wp-content/uploads/2010/11/nsstring-i-procent.png" alt="" width="620" height="150" /></a>Jak zrobić znak procenta w NSString? Wprowadzenie samego % spowoduje, że <strong>NSString</strong> spróbuje go przetworzyć, ale będzie oczekiwał jakiegoś znaku &#8222;po&#8221;, który pozwoli mu określić typ. Ponieważ żadnego nie znajdzie, nie wyświetli żadnego znaku w danym miejscu. Specjalnie do tego zadania przygotowano zatem znak <strong>%%</strong>, który rozwiązuje problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/iphone-procent-w-nsstring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPhone: problem przetwarzania dużej ilości danych</title>
		<link>http://blog.poslinski.net/iphone-problem-przetwarzania-duzej-ilosci-danych/</link>
		<comments>http://blog.poslinski.net/iphone-problem-przetwarzania-duzej-ilosci-danych/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 17:30:00 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[coredata]]></category>
		<category><![CDATA[multithreading]]></category>
		<category><![CDATA[nsmanagedcontext]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=634</guid>
		<description><![CDATA[W przypadku tworzenia bardziej skomplikowanych aplikacji, na platformę mobilną Apple, szczególnie gdy wykorzystuje się klasy z przestrzeni CoreData, pojawia się problem &#8222;freez&#8217;ów&#8221; aplikacji. Podczas wykonywania wielu zapytań w krótkim czasie w głównym wątku aplikacji, dochodzi do sytuacji, w której widok nie zostaje odświeżany. Innymi słowy, jeżeli programista, chce np. aktualizować pasek postępu, musi wykonywać bardziej [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/10/iphone-coredata-problem.png"><img src="http://blog.poslinski.net/wp-content/uploads/2010/10/iphone-coredata-problem.png" alt="" title="iphone-coredata-problem" width="620" height="150" class="aligncenter size-full wp-image-637" /></a>W przypadku tworzenia bardziej skomplikowanych aplikacji, na platformę mobilną Apple, szczególnie gdy wykorzystuje się klasy z przestrzeni CoreData, pojawia się problem &#8222;freez&#8217;ów&#8221; aplikacji. Podczas wykonywania wielu zapytań w krótkim czasie w głównym wątku aplikacji, dochodzi do sytuacji, w której widok nie zostaje odświeżany. Innymi słowy, jeżeli programista, chce np. aktualizować pasek postępu, musi wykonywać bardziej skomplikowane operacje w dodatkowym wątku, aby odciążyć wątek główny i móc aktualizować widok.<span id="more-634"></span><br />
I o ile stworzenie nowego wątku, sprowadza się do prostego kodu:</p>
<pre name="code" class="objective-c">
/* Kolejka zadań - init (autorelease) */
NSOperationQueue *queue = [[NSOperationQueue alloc] init];

/* Stworzenie zadania, które dodamy do kolejki, które wywoła metodę "zadanie" w osobnym wątku */
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(zadanie) object:nil];

/* Dodanie zadania do kolejki (wątku) */
[queue addOperation:operation];

[operation release];
[queue release];
</pre>
<p>W przypadku bardzo skomplikowanych operacji przy obiektach CoreData, szczególnie gdy np. dodawane jest wiele obiektów do bazy i wykonywana na NSManagedContext metoda save, może dojść do sytuacji, że coś pójdzie nie tak. Jak zachowa się aplikacja, gdy dojdzie do takiej sytuacji w głównym wątku? Odpowiedź nie jest jednoznaczna, albowiem zależy od bardzo istotnej rzeczy. Mianowicie zależy od tego, czy NSManagedContext został stworzony w obrębie wątku głównego czy też nowo utworzonego wątku pobocznego. W pierwszym przypadku, aplikacja przestanie odpowiadać, ale <strong>nie</strong> przestanie działać! Innymi słowy, aplikacja będzie próbować wykonać zapis do skutku, ale bez rezultatu. Rozwiązaniem tego problemu, jest <strong>stworzenie nowego obiektu NSManagedContext</strong> w obrębie metody zdarzenie, dzięki czemu, nawet jeśli któraś z operacji nie powiedzie się, aplikacja nadal będzie się wykonywać.</p>
<p>Więcej informacji na ten temat, można znaleźć w <a href="http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdMultiThreading.html">dokumentacji</a>.</p>
<p>Link do <a href="http://www.flickr.com/photos/blakespot/2376243022/">obrazka promującego</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/iphone-problem-przetwarzania-duzej-ilosci-danych/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone: przechwytywanie UITextField i UITextView</title>
		<link>http://blog.poslinski.net/iphone-przechwytywanie-uitextfield-i-uitextview/</link>
		<comments>http://blog.poslinski.net/iphone-przechwytywanie-uitextfield-i-uitextview/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 18:19:50 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[uitextfield]]></category>
		<category><![CDATA[uitextfielddelegate]]></category>
		<category><![CDATA[uitextview]]></category>
		<category><![CDATA[uitextviewdelegate]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=625</guid>
		<description><![CDATA[W każdej aplikacji, w której ma pojawić się klawiatura, szczególnie gdy zaczyna się swoją przygodę z programowaniem na platformę Apple, dochodzi do sytuacji, że trzeba przechwycić zakończenie edycji. Najlepiej, jeśli pole, przycisku go, będzie ustawione na &#8222;Done&#8221;, wtedy widać ładny przycisk &#8222;Gotowe&#8221;, jednak jego standardowe zachowanie, nie jest tym czego potrzeba. Należy je dopiero zaprogramować. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/09/iphone_uitextfield_uitextview.png"><img class="aligncenter size-full wp-image-626" title="iphone_uitextfield_uitextview" src="http://blog.poslinski.net/wp-content/uploads/2010/09/iphone_uitextfield_uitextview.png" alt="" width="620" height="150" /></a>W każdej aplikacji, w której ma pojawić się klawiatura, szczególnie gdy zaczyna się swoją przygodę z programowaniem na platformę Apple, dochodzi do sytuacji, że trzeba przechwycić zakończenie edycji. Najlepiej, jeśli pole, przycisku go, będzie ustawione na &#8222;Done&#8221;, wtedy widać ładny przycisk &#8222;Gotowe&#8221;, jednak jego standardowe zachowanie, nie jest tym czego potrzeba. Należy je dopiero zaprogramować.</p>
<h2><span id="more-625"></span>UITextField</h2>
<p>W przypadku, UITextField, sprawa jest dość prosta i ogranicza się do dodania protokołu w pliku nagłówkowym (*.h), klasy w której potrzebujemy przechwycić zdarzenie klawiatury. Należy dodać zaraz po nazwie klasy lub klasie po której ona dziedziczy, następujący kod:</p>
<pre class="objective-c" name="code">&lt;UITextFieldDelegate&gt;</pre>
<p>Protokół ten, wprowadza <a href="http://developer.apple.com/iphone/library/documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html" target="_blank">kilka ciekawych metod</a>, które można nadpisać. W wyżej opisanym przypadku, aby ukryć klawiaturę wystarczy w pliku nagłówkowym wprowadzić następujący kod:</p>
<pre class="objective-c" name="code">- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

[naszTextField resignFirstResponder];

return YES;
}</pre>
<p>Przykład ten zakłada, że w widoku znajduje się tylko <strong>naszTextField</strong>.</p>
<h2>UITextView</h2>
<p>W przypadku UITextView, wystarczy zmienić w pliku nagłówkowym protokół na:</p>
<pre class="objective-c" name="code">&lt;UITextViewDelegate&gt;</pre>
<p>a w metodzie, która przechwytuje kliknięcie, które w przypadku <strong>UITextView</strong>, tworzy nową linię w polu tekstowym, zastosować następujący kod:</p>
<pre class="objective-c" name="code">- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
{
if ( [text isEqualToString: @"\n"] ) {
[textView resignFirstResponder];
return NO;
}
return YES;
}</pre>
<h2>UITextView z zaokrągloną ramką jak w UITextField?</h2>
<p>Czemu nie? Wystarczy zaimportować odpowiednią klasę:</p>
<pre class="objective-c" name="code">#import  &lt;QuartzCore/QuartzCore.h&gt;</pre>
<p>dzięki czemu otworem staną nowe właściwości w UITextView, pozwalające definiować kolor, grubość i zaokrąglenie ramki. Nic nie stoi na przeszkodzie, żeby UITextView wyglądał tak samo jak UITextField.</p>
<pre class="objective-c" name="code">self.naszTextView.layer.borderWidth = 1;
self.naszTextView.layer.cornerRadius = 8;
self.naszTextView.layer.borderColor = [[UIColor lightGrayColor] CGColor];</pre>
<h2>Na koniec</h2>
<p>Nie ma problemu, aby w widoku występowało wiele TextField&#8217;ów oraz TextView, wtedy wystarczy zastosować if&#8217;y w metodach przechwytujących lub switch&#8217;e jak kto woli.</p>
<p>Sponsor foto: <a href="http://www.flickr.com/photos/4yas/1464567142/">link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/iphone-przechwytywanie-uitextfield-i-uitextview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPhone: performSelector withObject afterDelay:</title>
		<link>http://blog.poslinski.net/iphone-performselector-withobject-afterdelay/</link>
		<comments>http://blog.poslinski.net/iphone-performselector-withobject-afterdelay/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 15:45:54 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[performSelector]]></category>
		<category><![CDATA[viewDidAppear]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=615</guid>
		<description><![CDATA[Co zrobić, jeżeli po załadowaniu jakiegoś widoku, potrzeba wywołać i wyświetlić kolejny, bo np. okazało się, że brakuje jakiś danych? Pozornie, mogło by się wydawać, że wystarczy w metodzie viewDidAppear albo zdissmisować obecny widok, wracając do starego, albo wywołać nowy.Wszystko oczywiście zależy od tego jakiego kontrolera używamy. Ale ogólnie rzecz biorąc, wystarczy wykorzystać metodę: [self [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/08/iphone-perform-selector.png"><img class="aligncenter size-full wp-image-616" title="iphone-perform-selector" src="http://blog.poslinski.net/wp-content/uploads/2010/08/iphone-perform-selector.png" alt="" width="620" height="150" /></a>Co zrobić, jeżeli po załadowaniu jakiegoś widoku, potrzeba wywołać i wyświetlić kolejny, bo np. okazało się, że brakuje jakiś danych? Pozornie, mogło by się wydawać, że wystarczy w metodzie viewDidAppear albo zdissmisować obecny widok, wracając do starego, albo wywołać nowy.<span id="more-615"></span>Wszystko oczywiście zależy od tego jakiego kontrolera używamy. Ale ogólnie rzecz biorąc, wystarczy wykorzystać metodę:</p>
<p>[self <span style="color: #993366;">performSelector</span>:@selector(<span style="color: #ff9900;">nazwaMetodyDoWykonania</span>) <span style="color: #993366;">withObject</span>:self <span style="color: #993366;">afterDelay</span>: (<span style="color: #ff9900;">delayJakoFloatOznaczajacySekundy</span>)];</p>
<p>Logikę tego co się stanie, wkładamy do <span style="color: #ff9900;">nazwaMetodyDoWykonania</span> i gotowe!</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">[self performSelector:@selector(zmienNauczyciela) withObject:self afterDelay:1];</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/iphone-performselector-withobject-afterdelay/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zarządzanie projektami &#8211; to proste</title>
		<link>http://blog.poslinski.net/zarzadzanie-projektami-to-proste/</link>
		<comments>http://blog.poslinski.net/zarzadzanie-projektami-to-proste/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 18:22:07 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[inne]]></category>
		<category><![CDATA[moje strony]]></category>
		<category><![CDATA[projekty]]></category>
		<category><![CDATA[project managment]]></category>
		<category><![CDATA[zarządzanie projektami]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=606</guid>
		<description><![CDATA[Nie tylko My programiści, stajemy przed problemem zarządzania powierzonym nam projektem. Szczególnie, gdy w grę wchodzi wieloosobowa współpraca, wygodna i prosta platforma do współpracy między osobami zaangażowanymi w dany produkt jest bardzo ważna. Dla osób, które szukają szybkiego i wygodnego rozwiązania, powstał goProjekt. Skąd ten wpis? goProjekt, to system realizowany w ramach dotacji z z [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/07/project-menagement-to-proste.png"><img class="aligncenter size-full wp-image-607" title="project-menagement-to-proste" src="http://blog.poslinski.net/wp-content/uploads/2010/07/project-menagement-to-proste.png" alt="" width="620" height="150" /></a>Nie tylko My programiści, stajemy przed problemem zarządzania powierzonym nam projektem. Szczególnie, gdy w grę wchodzi wieloosobowa współpraca, wygodna i prosta platforma do współpracy między osobami zaangażowanymi w dany produkt jest bardzo ważna. Dla osób, które szukają szybkiego i wygodnego rozwiązania, powstał goProjekt.<span id="more-606"></span></p>
<h2>Skąd ten wpis?</h2>
<p>goProjekt, to system realizowany w ramach dotacji z z programu POIG 8.1.  Piszę o nim nie tylko dlatego, że jako programista, muszę mieć pojęcie o project management, ale również dlatego, że goProjekt wyszedł spod moich rąk.</p>
<h2>Dla kogo ten system?</h2>
<p>System docelowo ma stawiać na maksymalne user-friendly, ma być szybki (stąd między innymi niemal w całości wykorzystuje ajax) i ma być bezpieczny (stąd SSL i kilka innych zabiegów, które mają poprawić bezpieczeństwo).</p>
<p>Aplikacja jest obecnie w fazie beta, ale jest to już na tyle stabilna beta, że postanowiłem o niej napisać. Program oprócz ewidencji celów i zadań, posiada również system wiadomości, które mogą być wykorzystywane jako archiwum korespondencji (emaili) między użytkownikami, archiwum plików, gdzie można przechowywać różne wersje konkretnego pliku, cz w końcu archiwum tablic, które koncepcyjnie nawiązują do usługi Google Wave.</p>
<p>Do końca roku, zostanie wprowadzonych szereg nowych funkcjonalności, a korzystanie z goProjekt jest obecnie darmowe! W przyszłości, należy się spodziewać płatnej usługi, ale obiecuję, że cenowo bardzo konkurencyjnej względem innych tego typu produktów na rynku.</p>
<h2>Zacznij już dziś</h2>
<p>Jeżeli jeszcze nie miałeś do czynienia z project management, może właśnie zaczniesz swoją przygodę od poznania goProjekt?</p>
<p><a title="Project Menagement - System zarządzania projektami goProjekt" href="http://goprojekt.pl" target="_blank">http://goprojekt.pl</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/zarzadzanie-projektami-to-proste/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>jQuery: unselect w WebKit?</title>
		<link>http://blog.poslinski.net/jquery-unselect-w-webkit/</link>
		<comments>http://blog.poslinski.net/jquery-unselect-w-webkit/#comments</comments>
		<pubDate>Fri, 14 May 2010 20:04:56 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[unselect]]></category>
		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=599</guid>
		<description><![CDATA[Pod przeglądarkami bazującymi na silniku WebKit w przypadku ustawienia .focus na polu, pojawia się problem zaznaczonego tekstu. Jak w łatwy sposób sobie z nim poradzić, aby np. kliknięcie na dowolny klawisz nie wyczyściło nam inputa? Rozwiązanie Cała sztuczka polega na pobraniu wartości inputa, za pomocą metody val(); var content = $("input[name=nazwaPola]").val(); Oraz po wykonaniu .focus, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/05/unselect_w_webkit.png"><img src="http://blog.poslinski.net/wp-content/uploads/2010/05/unselect_w_webkit.png" alt="jQuery unselect w Webkit" title="unselect_w_webkit" width="620" height="150" class="aligncenter size-full wp-image-602" /></a>Pod przeglądarkami bazującymi na silniku WebKit w przypadku ustawienia .focus na polu, pojawia się problem zaznaczonego tekstu. Jak w łatwy sposób sobie z nim poradzić, aby np. kliknięcie na dowolny klawisz nie wyczyściło nam inputa?<span id="more-599"></span></p>
<h2>Rozwiązanie</h2>
<p>Cała sztuczka polega na pobraniu wartości inputa, za pomocą metody val();</p>
<pre name="code" class="javascript">var content = $("input[name=nazwaPola]").val();</pre>
<p>Oraz po wykonaniu .focus, nadpisaniu wartości ponownie do pola, co odznaczy tekst w polu.</p>
<pre name="code" class="javascript">$("input[name=nazwaPola]").focus.val(content);</pre>
<p>Prawda, że proste?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/jquery-unselect-w-webkit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

