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ć?

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

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;
}


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 ...


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..


4

Po naciśnięciu klawisza powrotu zadzwoń:

[uitextfield resignFirstResponder];

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!


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;
}

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        
    }

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)
}

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()
     }
}

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ę.



0

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

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.