poniedziałek, Wrzesień 6th, 2010

iPhone: przechwytywanie UITextField i UITextView

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 „Done”, wtedy widać ładny przycisk „Gotowe”, jednak jego standardowe zachowanie, nie jest tym czego potrzeba. Należy je dopiero zaprogramować.

UITextField

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:

<UITextFieldDelegate>

Protokół ten, wprowadza kilka ciekawych metod, które można nadpisać. W wyżej opisanym przypadku, aby ukryć klawiaturę wystarczy w pliku nagłówkowym wprowadzić następujący kod:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

[naszTextField resignFirstResponder];

return YES;
}

Przykład ten zakłada, że w widoku znajduje się tylko naszTextField.

UITextView

W przypadku UITextView, wystarczy zmienić w pliku nagłówkowym protokół na:

<UITextViewDelegate>

a w metodzie, która przechwytuje kliknięcie, które w przypadku UITextView, tworzy nową linię w polu tekstowym, zastosować następujący kod:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
{
if ( [text isEqualToString: @"\n"] ) {
[textView resignFirstResponder];
return NO;
}
return YES;
}

UITextView z zaokrągloną ramką jak w UITextField?

Czemu nie? Wystarczy zaimportować odpowiednią klasę:

#import  <QuartzCore/QuartzCore.h>

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.

self.naszTextView.layer.borderWidth = 1;
self.naszTextView.layer.cornerRadius = 8;
self.naszTextView.layer.borderColor = [[UIColor lightGrayColor] CGColor];

Na koniec

Nie ma problemu, aby w widoku występowało wiele TextField’ów oraz TextView, wtedy wystarczy zastosować if’y w metodach przechwytujących lub switch’e jak kto woli.

Sponsor foto: link

Be Sociable, Share!

Kategorie: iPhone / poradniki
Możesz śledzić komentarze do tego wpisu poprzez kanał RSS 2.0. Możesz również napisać własny komentarz, lub umieścić odnośnik do tego wpisu, na swojej stronie.

Jeden komentarz

Grudzień 11, 2010

Ja często stosuję:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
[theTextField resignFirstResponder];
return YES;
}

Sprawdza się również przy kilku polach (jeżeli mają być obsługiwane podobnie).


  • *

    Spam Protection by WP-SpamFree