Jak zrobić klawisz powrotu na iPhonie, aby klawiatura zniknęła?

108

Mam dwa UITextFields(np. Nazwę użytkownika i hasło), ale nie mogę pozbyć się klawiatury po naciśnięciu klawisza powrotu na klawiaturze. W jaki sposób mogę to zrobić?

K.Honda
źródło

Odpowiedzi:

242

Najpierw musisz dostosować się do UITextFieldDelegateprotokołu w pliku nagłówkowym View / ViewController w następujący sposób:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Następnie w pliku .m musisz zaimplementować następującą UITextFieldDelegatemetodę protokołu:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];

    return YES;
}

[textField resignFirstResponder]; upewnia się, że klawiatura została odrzucona.

Upewnij się, że ustawiasz swój view / viewcontroller jako delegata UITextField po zainicjowaniu pola tekstowego w .m:

yourTextField = [[UITextField alloc] initWithFrame:yourFrame];
//....
//....
//Setting the textField's properties
//....    
//The next line is important!!
yourTextField.delegate = self; //self references the viewcontroller or view your textField is on
Sid
źródło
7
Możesz również zaimplementować delegata w scenorysie, klikając pole tekstowe, wyświetl panel Narzędzia, kliknij Inspektor połączeń, przeciągnij gniazdo delegata na kontroler widoku.
guptron
1
Gdzie jest zaimplementowana Twoja metoda textFieldShouldReturn? Musisz ustawić tę klasę jako delegata UITextField. Wywołanie zwrotne delegata będzie uruchamiane tylko z klasy, która jest ustawiona jako delegat, i jeśli klasa ją zaimplementowała.
Sid
1
Czy ustawiłeś MyViewController, aby był zgodny z UITextFieldDelegate w jego nagłówku?
Sid
1
O ile myTextField zostało przydzielone poprawnie i nie jest zerowe. Technicznie rzecz biorąc, jest dobrze, jeśli jest zero (bez awarii), ale wtedy to nic nie da :)
Sid
1
A jeśli mogę dodać, nie ma znaczenia, czy używasz tylko nadpisanej klasy UITextField, takiej jak UIFloatLabelTextField, NADAL POTRZEBUJESZ yourTextField.delegate = self; !!!
Gellie Ann
19

Zaimplementuj metodę UITextFieldDelegate w następujący sposób:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
    [aTextField resignFirstResponder];
    return YES;
}
Nick Weaver
źródło
6

Twoje UITextFields powinny mieć obiekt delegata (UITextFieldDelegate). Użyj poniższego kodu w swoim pełnomocniku, aby klawiatura zniknęła:

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

Powinien działać jak dotąd ...

cschwarz
źródło
Hej stary, zrobiłem to, co powiedziałeś powyżej, ale nadal nie mogę sprawić, by klawiatura zniknęła. Czy masz jakies pomysły? Dzięki.
K.Honda
Hej Chris, wszystko już załatwione. Dzięki.
K.Honda
6

Zajęło mi kilka prób, miałem ten sam problem, to zadziałało dla mnie:

Sprawdź pisownię na -

(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

Poprawiłem swoje w textFieldzamiast textfield, wielkie litery „F” ... i bingo !! zadziałało..

Ema
źródło
4

Po naciśnięciu klawisza powrotu zadzwoń:

[uitextfield resignFirstResponder];
Conor Taylor
źródło
Hej Conor, skąd aplikacja wie, kiedy naciśnięto klawisz powrotu? Dzięki.
K.Honda
3

Po dłuższym czasie szukania czegoś, co ma sens, to właśnie złożyłem i zadziałało jak urok.

.h

//
//  ViewController.h
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

// Connect your text field to this the below property.
@property (weak, nonatomic) IBOutlet UITextField *theTextField;

@end

.m

//
//  ViewController.m
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    // _theTextField is the name of the parameter designated in the .h file. 
    _theTextField.returnKeyType = UIReturnKeyDone;
    [_theTextField setDelegate:self];

}

// This part is more dynamic as it closes the keyboard regardless of what text field 
// is being used when pressing return.  
// You might want to control every single text field separately but that isn't 
// what this code do.
-(void)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
}


@end

Mam nadzieję że to pomoże!

user2904476
źródło
3

Ustaw delegata UITextField na swój ViewController, dodaj punkt odniesienia odwołujący się między właścicielem pliku a UITextField, a następnie zaimplementuj tę metodę:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}
Avinash651
źródło
3

Dodaj to zamiast wstępnie zdefiniowanej klasy

class ViewController: UIViewController, UITextFieldDelegate {

Aby usunąć klawiaturę po kliknięciu poza nią

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

i aby usunąć klawiaturę po naciśnięciu klawisza Enter

dodaj tę linię w viewDidLoad ()

inputField jest nazwą używanego pola textField.

self.inputField.delegate = self

i dodaj tę funkcję

func textFieldShouldReturn(textField: UITextField) -> Bool {        
        textField.resignFirstResponder()        
        return true        
    }
Ali Kahoot
źródło
2

Swift 2:

to jest to, co robi się, aby zrobić wszystko!

zamknij klawiaturę Doneprzyciskiem lub Touch outSide, Nextaby przejść do następnego wejścia.

Najpierw zmień plik TextFiled Return Keyna Nextw StoryBoard.

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}
Mojtabye
źródło
Apple wyraźnie odradza używanie tagów. Zamiast tego możesz użyć IBOutletCollection
Antzi
2

w swift powinieneś delegować UITextfieldDelegate , ważne jest, aby o tym nie zapomnieć, w viewController, na przykład:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}
Eduardo Oliveros
źródło
0

Możesz dodać IBAction do uiTextField (zdarzenie wydania to „Did End On Exit”), a IBAction może nazwać hideKeyboard,

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

możesz również zastosować go do innych pól tekstowych lub przycisków, na przykład możesz dodać ukryty przycisk do widoku, klikając go, aby ukryć klawiaturę.

慭 慭 流 觞
źródło
0

Jeśli chcesz zniknąć klawiaturę podczas pisania w plikach tekstowych pola alertów

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
DURGESH
źródło