2009-05-05 6 views
20

Mam jedno pole do wprowadzania tekstu w mojej aplikacji na iphone, kiedy dotkniesz go w symulatorze, pojawi się klawiatura. Ale nie ma sposobu, aby się go pozbyć. Inne strony internetowe podają rozwiązania, nie wyjaśniając, dlaczego powinny działać, a one nie działają dla mnie. Jeden mówi, aby delegat pola tekstowego był twój, a następnie zadzwoń na adres obiektu resignfirstresponder, ale nigdy nie zostanie wywołany. Jakieś sugestie? Czy ktoś może wyjaśnić, co się właściwie dzieje? Mogę sam to rozgryźć, gdybym wiedział, jaki jest paradygmat projektu ...Jak zmusić klawiaturę do odejścia w symulatorze iPhone'a?

Może powinienem po prostu wcisnąć przycisk "go", więc mam coś, aby oderwać uwagę od pola tekstowego?

Odpowiedz

19

Jednym ze sposobów na to jest, aby ustawić obiekt jako delegat do pola tekstowego i wdrożenie

- (BOOL)textFieldShouldReturn:(UITextField *)textField 

w której dzwonisz [textField resignFirstResponder]

Spowoduje to klawiaturę zniknąć kiedy nacisnąć przycisk return/go/done (bez względu na to, jak ustawić prawy dolny klawisz klawiatury).

Aby uzyskać więcej informacji, zobacz numer referencyjny UITextFieldDelegate.

+1

Kiedy pierwszy zaczynasz, znalazłem [w „Twoja pierwsza "Samouczek" aplikacji dla systemu iOS (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/Articles/00_Introduction.html) jest pomocny. Więcej informacji na temat tej odpowiedzi można znaleźć w podsekcji "Delegat pola tekstowego" w ["Implementowanie kontrolera widoku"] ​​(http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/ Artykuły/06_ImplementingController.html). – sage

+1

Wystarczająco proste, ale dlaczego nie jest to domyślne zachowanie? Działa to jednak .. implementuj interfejs jak powyżej i podłącz połączenie 'delegata' w IB do właściciela pliku. – Bobby

+0

Czy zastępuję '[textField resignFirstResponder]' z nazwą mojego pola tekstowego, na przykład '[myTextField resignFirstResponder]', nie mogę uruchomić go tak czy inaczej na Xcode 4.2. – raffian

5

- (BOOL)textFieldShouldReturn:(UITextField *)textField w twoim uczestniku jest wywoływany po naciśnięciu przycisku powrotu.

Chcesz zadzwonić pod numer [textField resignFirstResponder], a następnie zwrócić YES. To powinno wystarczyć. Upewnij się również, że delegat jest ustawiony. W razie wątpliwości dodaj punkt przerwania lub NSLog i sprawdź.

16

Aby zamknąć klawiaturę, można użyć funkcji TextField Delegate.

Aby użyć tej procedury, wykonaj następujące czynności ...
1. Wyświetl podgląd kontrolera. h dodaj deklarację delegata w ten sposób:

@interface ViewController : UIViewController <UITextFieldDelegate> { 
    }
2. W swoim widokuController. m wywołanie tej metody:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
3. Następnie należy napisać kod jak poniżej:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
    }
4. Ostatnim krokiem jest ustawienie pola tekstowego za Delegat:
- (void)viewDidLoad { 
     [super viewDidLoad]; 
     self.textField.delegate = self; 
    }

+0

Czy ta sztuczka działa dla wszystkich pól tekstowych w jednym oknie? – raffian

+0

Tak, powinno ... W każdym razie, jeśli chcesz zastosować delegata tylko w określonym polu tekstowym, w metodzie textFieldShouldReturn: change [textField resignFirstResponder]; z [yourTextField resignFirstResponder]; – matteodv

+0

Nie można uzyskać tego działa, zrobił wszystko, nawet dodał 'myTextField.delegate = self' w 'initWithNibName' w ViewController, ale delegat nigdy nie zostanie wywołany – raffian