Agudo

web2

t: 504 426 710 e: pawel@agudo.pl

Lekcja I - pierwsza aplikacja w Cocoa

Data: 26.06.2009

Tak jak pisałem w swoim pierwszym wpisie postaram się raz na jakiś przygotować coś na temat moich przygód podczas nauki programowania na komputery Apple. Naszym pierwszym dziełem będzie prosta aplikacja zliczająca ilość kliknięć w przycisk.

Na początku otwieramy Xcode i w menu wybieramy File -> New Project następnie w lewej części okna zaznaczamy Cocoa application, klikamy Choose, zapisujemy projekt pod nazwa np "Lekcja 1". Nasz edytor powinien wyglądać mniej więcej tak.

Po lewej stronie mamy podgląd na listę plików i folderów aplikacji a w głównej części zazwyczaj mamy otwarty aktualnie edytowany plik. Rozwijamy folder Resources i klikamy dwa razy na plik MainMenu.xib, otworzy nam się Interface Builder, czyli jak sama nazwa wskazuje program który pomoże nam w stworzeniu interfejsu naszego oprogramowania.

Interface Builder składa się z kilku oddzielnych okien, na początek szukamy okna Library i Window.

W oknie Library znajdą się obiekty/kontrolki pomagające wizualizować budowaną aplikacje, na dole w filtrze wpisujemy "text" z folderu Cocoa - Views & Cells - Inputs & Values przeciągamy dwa obiekty Label i jeden Text Field na okno Window. Dalej w filtrze zamiast "text" wpisujemy "button", szukamy Rounded texture button i także przeciągamy go na Window. Aby zmienić tekst w polach tekstowych Label należy na nie kliknąć dwa razy, w jedno pole wpisujemy "Kliknąłeś:" a w drugie "0"(zero). Raz klikamy w kontrolkę - Text Filed szukamy okna które się będzie nazywać "Text Filed Attributes" w pole "Placeholder" wpisujemy 0.

Zapisujemy zmiany i zamykamy na razie Interface Builder. W Xcode wybieramy File -> New File... i szukamy Objective-C class, klikamy Next, nazywamy plik ClickController.m. i zapisujemy.

Powinny się pojawić nam dwa pliki - jeden nagłówkowy z rozszerzeniem .h a drugi z rozszerzeniem .m. Jeżeli pliki nie znalazły się w katalogu Classes to zaznaczamy je i przenosimy/przeciągamy tam. Otwieramy teraz plik ClickController.h i wpsiujemy/wklejamy poniższy kawałek kodu.

#import

@interface ClickController : NSObject {
IBOutlet NSTextField *textField;
IBOutlet NSTextField *textFieldInput;
int clickCount;
}
-(IBAction)click:(id)sender;
-(void)setCount:(int)count;

@end

W Objective-C plik ten podobnie jak w C służy do opisu implementacji. Na początku definiujemy 3 zmienne - dwa obiekty NSTextField, jedynym będzie kontrolka Label a drugiem TextField, clickCount będzie zmienną przechowującą ilość kliknięć. Później definiujemy dwie funkcje "click" i "setCount", pierwsza będzie wykonywana po wciśnięciu przycisku, druga służy do ustawiania nowej wartości zmiennej clickCount. Zapisujemy zmiany i przechodzimy do pliku ClickController.m powinien wyglądać nasępująco.

#import "ClickController.h"

@implementation ClickController

- (IBAction)click:(id)sender {
int c = clickCount;
[self setCount:++c];
[textField setIntValue:c];
[textFieldInput setIntValue:c];
}
-(void)setCount:(int)count {
clickCount = count;
}
-(void)awakeFromNib {
[self setCount:0];
}

@end

Jak widać opisujemy tu aż 3 funkcje, dodatowko pojawiła się funkcja awakeFromNib która wywołuje się po załadowaniu widoku(pliku .xib) ustawia licznik kliknięć na zero. Funkcja setCount jest zwykłą funkcja Set ustawiającą wartość zmiennej. Natomiast cała "magia" dzieję się w funkcji click. Na początku deklarujemy zmienną c i przpisujemy jej ilośc klinięć, następnie ustawiamy ilość kliknięć zwiększone o jeden. Zmienna textField odpowiada za licznik zrobiony z obiektu Label a textFieldInput za licznik z Text Filed. Zapisujemy plik, ponownie otwieramy Interface Builder i plik MainMenu.xib.

W filtrze wpisujemy "object" i z listy wybieramy kontrolkę która będzie niebieskim sześcianem podpisanym "Object", przeciągamy go na okno o nazwie MainMenu.xib(English) zaznaczamy go i szukamy zakładki podpisanej "Click Controller Identity", w pole Class wpisujemy ClickController, powinny się nam pojawić w Class Outlets dwie zmienne które zadeklarowaliśmy w pliku nagłówkowym.

Teraz klikamy prawym przyciskiem na obiekcie ClickController, w Outlets wybieramy pierwszą zmienną textFiled i przeciągamy strzałką na 0(zero) które znajduje się zaraz za "Kliknąłeś:", poźniej postepujemy analogicznie z textFieldInput, tylko tym razem przeciągamy strzałke na kontrollke pola do wpisywania treści.

Jeszcze zostało nam tylko ustawienie aby po wciśnieciu przycisku "Klik" wywołać akcję click. Prawym przyciskiem myszy klikamy na kontrolkę przysiku i przeciągamy strzałkę na obiekt ClickController jedyną opcją jaka powinna się pojawić jest akcja click: zaznaczamy ją.

Zapisujemy plik, wyłączamy IB, przechodzimy do Xcode i klikamy w "Build and Go". Jeśli wszystko poszło dobrze powinien pojawić się nam działający program. I to było by na tyle. Polecam prze-klikać preferencje Xcode, poeksperymentować z opcjami i zapoznać się z możliwościami jakie daje to środowisko.

Jeszcze z takich osobistych wycieczek, nie jestem specjalistą w programowaniu Obj-C i Cocoa, sam dopiero się uczę, więc jeśli znalazłeś jakiś błąd, wiesz jak zrobić coś lepiej - napisz to w komentarzu.