2010-10-20 17 views
21

Próbuję dokonać edycji UITextView zrezygnować z klawiatury (resignFirstResponder), gdy użytkownik dotknie "Gotowe". Korzystanie z UITextField, udało mi się to zrobić za pomocą następującego kodu:Jak zrobić UITextView przycisk "Gotowe" Zrezygnuj?

- (IBAction)doneEditing:(id)sender { 
    [sender resignFirstResponder]; 
} 

... a następnie podłączyć go do odpowiedniego UITextField w konstruktorze Interface do akcji „skończyła się na wyjściu”.

Jednak z numerem UITextView nie mogę uzyskać dostępu do czynności "Czy koniec przy wyjściu". Wszelkie sugestie, jak to zrobić?

Odpowiedz

12

nowy Odpowiedź

Na View, którą masz UIBarButton ("Gotowe"), który jest połączony z IBAction poniżej:

- (IBAction)doneEditing:(id)sender { 
    [textView resignFirstResponder]; 
} 

TextView Gdzie jest twój wylot TextView zdefiniowane w Twój plik .h i jest połączony z plikiem Storyboard lub .xib. Tak:

@property (retain, nonatomic) IBOutlet UITextView *textView; 

stary Odpowiedź

Sprawdź:

  1. Czy UITextViewDelegate określony w .h
  2. Wdrożenie metody delegata dla UITextView: textViewShouldEndEditing, powrót TAK
  3. upewnij się, że .m (kontroler) jest delegatem dla podglądu uitext w IB
  4. resignFirstResponder powinien teraz działać jako .
+0

To powinno zadziałać. Zrobiłem to w niektórych moich aplikacjach ... – gabaum10

+2

textViewShouldEndEditing NIE jest wywoływane, gdy użytkownik naciśnie przycisk Return/Done na UITextView, sprawdzanie powrotu karetki w shouldChangeTextInRange jest jedynym sposobem na odpowiedź – valexa

+0

Zła odpowiedź! "shouldChangeTextInRange" jest sposobem na ... – ElasticThoughts

84

Przyjęta odpowiedź nie zadziałała. Zamiast następujący sposób delegat powinien być wywoływany tak:

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

wklej to do klasy przypisanej być delegata UITextView i będzie ona działać.

+10

Ta odpowiedź zlekceważy cały powód używania UITextView, gdzie użytkownik będzie chciał dodać wiele linii, co jest tym, co przycisk powrotu robi w kontekście UITextView. – zachzurn

+1

To jest sposób, aby to zrobić! Przyjęta odpowiedź NIE działa. – ElasticThoughts

+3

@zachzurn - Nie sądzę, że ma to zastosowanie w tym przypadku, gdy istnieje chęć posiadania tekstu wielowierszowego i naciśniętego przycisku na klawiaturze. Jest dla mnie jasne, że naciśnięcie przycisku Gotowe działa jak przycisk powrotu, może być słabą użytecznością. –

-4

Aby odłożyć przycisk na klawiaturę i resignFirstResponder, musisz zaimplementować metodę przekazania.

  1. W swojej ncurses.h wdrożyć UITextFieldDelegate

    @interface YourViewController : UIViewController <UITextFieldDelegate> 
    
  2. Następnie wdrożyć textFieldShouldReturn w .m

    -(BOOL) textFieldShouldReturn:(UITextField *)textField 
    { 
    [textField resignFirstResponder]; 
    return YES; 
    } 
    
  3. Nie zapomnij połączyć delegata UITextField do Właściciel pliku (bardzo ważne)

+0

najprostszy, działa dobrze dla mnie. Thanx – zxcat

+18

Pytanie dotyczy jednak UITextView, a nie UITextField ... –

+0

upvote o co ?? OP poprosił o UITextView, a nie o UITextField ... –

Powiązane problemy