2011-01-07 11 views
31

Próbujemy dowiedzieć się, jak ukryć klawiaturę, ale mamy problemy z odpaleniem textFieldShouldReturn. Nie jesteśmy pewni, dlaczego?Zestaw SDK dla iPhone'a: ​​textFieldShouldReturn nie jest wywoływany

To co zostało zrobione:

* .h

@interface MultiSalesViewController : UIViewController <UITextFieldDelegate> 

* .c

txtCardNumber.delegate = self; 

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

Również textField ma swój zestaw do plików delegata właściciela w konstruktorze Interface. Jedną z dziwnych rzeczy jest to, że narzędzie viewController's - (void)textFieldDidEndEditing:(UITextField *)textField działa.

Czy ktoś może skomentować, jak ukryć klawiaturę?

+3

Nie wiedziałem, że można umieścić kod celu-c w pliku * .c i sprawić, by działało! – binnyb

+0

Lol tak, z pewnością to .m? –

Odpowiedz

1

mieć pewność, że MultiSalesViewController implementuje protokół UITextFieldDelegate:

@interface MultiSalesViewController : UIViewController <UITextFieldDelegate>

spróbuj dodać [self becomeFirstResponder]; po [textField resignFirstResponder];


EDIT: tylko kolejną myśl .. Czy Twój UITextField mieć ustawioną wartość dla returnKeyType?

txtCardNumber.returnKeyType = UIReturnKeyDone;

nie jestem pewien, czy to ma być ustawiony dla funkcji do pracy

+2

Obecnie wywołanie zwrotne textFieldShouldReturn NIE jest w ogóle uruchamiane, mimo że kontroler widoku implementuje UITextFieldDelegate. Jest to dziwne, ponieważ wywołanie zwrotne textFieldDidEndEditing jest. Wydaje się to dziwne, ponieważ oba są zdefiniowane jako część UITextFieldDelegate. Więc moje pytanie brzmi: dlaczego jest jeden ostrzał, a nie drugi? –

76

miałem dokładnie ten sam problem i to dlatego, że zapomniał ustawić delegata dla pól tekstowych budowniczy interfejsu do "właściciela pliku".

+2

Tak prosty, ale często zapominam o wymaganej konfiguracji IB, dziękuję. – ThunderHorse

+0

Też o tym zapomniałem, dzięki! – jomafer

6

Myślę, że używasz XIB. Jeśli tak, musisz również ustawić tam delegata. Kliknij prawym przyciskiem myszy na UITextfiled w Xib, a będziesz mieć opcję delegowania przeciągnij go do swojego właściciela pliku.

28

Miałem ten sam problem i, jak zasugerował Warren Crowther, udało mi się go rozwiązać, przytrzymując CTRL i przeciągając od TextBox do etykiety "Właściciel pliku".

(Gosh, tęsknię Visual Studio czasami ... !!)

enter image description here

(przepraszam za powtórzenie tego, co już zostało powiedziane, ale myślałem, że zrzut ekranu może być przydatne!)

+0

Dzięki Mike Twoja odpowiedź zadziałała :)) – janitheshan

+0

Ustawiłem złe "żółte pudełko" jako delegata. Dzięki! – Neo42

+0

na co to tłumaczy się w Xcode 5 za pomocą Storyboards? – drlobo

8

Widzę, że umieściłeś to w swoim kodzie, ale dla przyszłych użytkowników dodaj to do swojego kodu:

yourTextField.delegate = self;

10

Miałem delegata i wszystko. Ale używałem UITextView zamiast UITextfield ...

Być może pomoże to komuś w określeniu, dlaczego metody delegatów nie są uruchamiane.

+0

+1, aby uzyskać porady, które mogą pomóc komuś w skrajnym przypadku. –

+1

Dziękuję bardzo za to, ponieważ właśnie to mi się przydarzyło. Ugh – TMc

+0

czy to możliwe, że nadal działa z UITextView? –

2

Poniżej znajduje się odpowiedź Mike'a Gledhilla i Warrena Crowthera na aktualizację ze zrzutem ekranu z xcode 5.

(aby ustawić delegata UITextField, naciśnij i przytrzymaj klawisz Ctrl + przeciągnij z UITextField na żółty przycisk "File's Owner", pokazany na poniższym obrazku, jeśli delegowanie UITextField nie jest ustawione, metoda textFieldShouldReturn nigdy nie zostanie wywołana).

enter image description here

1

idź do połączenia Inspector i podłączyć delegata do wyświetlania kontroler .thats go.

2

Miałem wszystko poprawnie podłączone i - (BOOL)textFieldShouldReturn:(UITextField *)textField wciąż nie było wywoływane!

Jako pracy wokół skonfigurowałem metodę strzelania 'EditingDidEnd':

enter image description here

0

kontrolna zmusić go do pracy:

  • Czy ustawić regulator przenosić do instancji UITextField?

  • Upewnij się, że kontroler nie jest zwolniony przez przypisanie do właściwości (Autorelease) lub jawne jego zachowanie.

Powiązane problemy