webentwicklung-frage-antwort-db.com.de

Wie füge ich der Tastatur die Schaltfläche Fertig hinzu?

AKTUALISIEREN:

Ich habe auch versucht, den UITextViewDelegate-Delegaten zu implementieren und dann in meinem Controller Folgendes auszuführen:

- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
    [textView resignFirstResponder];
    return YES;
}

Ich habe auch den Delegaten der Textansicht auf "selbst" gesetzt (Controller-Ansichtsinstanz).

Wenn Sie auf die Schaltfläche Fertig klicken, wird nur noch eine neue Zeile eingefügt :(


AKTUALISIEREN:

Was ich bisher gemacht habe Ich habe ein UITextFieldDelegate von meinem View-Controller implementiert.

Ich habe die Textansicht per Outlet mit dem View Controller verbunden.

Dann tat ich:


self.myTextView.delegate = self;

Und:

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

Wenn ich jedoch auf die Schaltfläche Fertig klicke, wird nur eine neue Zeile hinzugefügt.

Ich habe also ein UITextView-Element in meiner Szene und wenn ein Benutzer darauf tippt, erscheint die Tastatur und es kann bearbeitet werden.

Ich kann die Tastatur jedoch nicht entlassen.

Wie kann ich der Tastatur die Schaltfläche "Fertig" hinzufügen, damit sie verworfen werden kann?

49
Richard Knop

das ist ganz einfach :)

[textField setReturnKeyType:UIReturnKeyDone];

um die Tastatur zu schließen, setzen Sie das <UITextFieldDelegate>-Protokoll in Ihrer Klasse ein

textfield.delegate = self;

und verwenden 

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [textField resignFirstResponder];
}

oder

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

Gehen Sie in Ihr Storyboard, wählen Sie Ihr Textfeld aus und unter dem Attribut-Inspektor gibt es eine Option mit der Aufschrift "Rücktaste". Wählen Sie "Fertig".

Dann geh in deinen ViewController und füge hinzu:

- (IBAction)dismissKeyboard:(id)sender;
{
    [textField becomeFirstResponder];
    [textField resignFirstResponder];
}

Kehren Sie dann zu Ihrem Textfeld zurück, klicken Sie auf "Outlets" und verknüpfen Sie "Did end on exit", um die Aktion "Deaktivieren" zu beenden.

16
Mike Z

Füge UIToolBar als benutzerdefinierte Ansicht hinzu, die die Schaltfläche Done als UIBarButtonItem enthält.

Dies ist eine sicherere und sauberere Methode, um die Schaltfläche Fertig zu einem beliebigen Tastaturtyp hinzuzufügen. Erstellen Sie UIToolBar, fügen Sie Done Button hinzu, und legen Sie inputAccessoryView eines beliebigen UITextFields oder UITextView fest.

UIToolbar *ViewForDoneButtonOnKeyboard = [[UIToolbar alloc] init];
[ViewForDoneButtonOnKeyboard sizeToFit];
UIBarButtonItem *btnDoneOnKeyboard = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                               style:UIBarButtonItemStyleBordered target:self
                                                              action:@selector(doneBtnFromKeyboardClicked:)];
[ViewForDoneButtonOnKeyboard setItems:[NSArray arrayWithObjects:btnDoneOnKeyboard, nil]];

myTextField.inputAccessoryView = ViewForDoneButtonOnKeyboard;

IBAction für die Schaltfläche "Fertig"

 - (IBAction)doneBtnFromKeyboardClicked:(id)sender
  {
      NSLog(@"Done Button Clicked.");

      //Hide Keyboard by endEditing or Anything you want.
      [self.view endEditing:YES];
  }

Swift 3

var ViewForDoneButtonOnKeyboard = UIToolbar()
ViewForDoneButtonOnKeyboard.sizeToFit()
var btnDoneOnKeyboard = UIBarButtonItem(title: "Done", style: .bordered, target: self, action: #selector(self.doneBtnFromKeyboardClicked))
ViewForDoneButtonOnKeyboard.items = [btnDoneOnKeyboard]
myTextField.inputAccessoryView = ViewForDoneButtonOnKeyboard

Funktion

  @IBAction func doneBtnFromKeyboardClicked (sender: Any) {
     print("Done Button Clicked.")
    //Hide Keyboard by endEditing or Anything you want.
    self.view.endEditing(true)
  }
13
ViJay Avhad

Schnelle Version:

In Ihrem ViewController:

textField.returnKeyType = UIReturnKeyType.Done
textField.delegate = self

Nach Ihrem ViewController

extension MyViewController: UITextFieldDelegate {        
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}
10
Esqarrouth

Okay, auch ich habe mit diesem Problem zu kämpfen. Derzeit greife ich in einer UITableViewCell (über Tags) auf ein UITextView zu. Da ich Prototypzellen verwende, kann ich weder IBActions noch IBOutlets verwenden, wie alle meinen. Stattdessen benutze ich;

- (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) Bereich Ersetzungstext: (NSString *) Text

Dadurch wird mir der Text jedes Mal angezeigt, wenn der Benutzer eine Schaltfläche drückt. Meine Lösung bestand darin, das ASCII-Zeichen für eine neue Zeile zu erhalten. "/ n". Wenn dies der eingegebene Text ist, würde ich den Ersthelfer zurücktreten. Zum Beispiel;

// If the text length is 0 then the user is deleting something, so only check the ascii character if there is text to check
if (text.length != 0) {
    // Get the Ascii character
    int asciiCode = [text characterAtIndex:0];
    // If the ascii code is /n or new line, then resign first responder
    if (asciiCode == 10) {
        [alertTextView resignFirstResponder];
        [DeviceTextView resignFirstResponder];
    }
}

Ich bin mir nicht sicher, ob jemand diese harte Lösung brauchen wird, aber ich dachte mir, ich würde es da draußen veröffentlichen, falls jemand es braucht!

1
Donato Perconti

Stellen Sie die Option 'Return Key' unter der Option text field im Inspektor für Ihr Textfeld ein . Klicken Sie dann mit der rechten Maustaste auf das Textfeld und halten Sie CTRL gedrückt, wählen Sie 'Did End On Exit' und ziehen Sie dieses in Ihre view controllers-Datei. Dadurch wird eine IBAction-Methode erstellt. Geben Sie der Methode einen Namen und geben Sie die folgenden Werte ein:

[textField becomeFirstResponder];
[textField resignFirstResponder];

Ihre Methode sollte so aussehen:

- (IBAction)methodName:(id)sender;
{
    [sender becomeFirstResponder];
    [sender resignFirstResponder];
}
1
Garreth Golding

Das Folgende ist mein Ansatz in Swift 3. Wenn Sie auf die Variable doneBtn geklickt haben, lassen Sie das Ereignis .editingDidEndOnExit senden. Ich verwende dieses Ereignis, um Fokusprobleme zwischen mehreren Textfeldern zu behandeln.

// My customized UITextField
class MyTextField: UITextField {

    override func awakeFromNib() {
        super.awakeFromNib()

        // Add toolBar when keyboardType in this set. 
        let set : [UIKeyboardType] = [.numberPad, .phonePad]
        if (set.contains(self.keyboardType) ) {
            self.addDoneToolbar()
        }
    }

    // Add a toolbar with a `Done` button
    func addDoneToolbar() {

        let toolbar = UIToolbar()
        let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
        let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(onToolBarDone))

        toolbar.items = [space, doneBtn]
        toolbar.sizeToFit()

        self.inputAccessoryView = toolbar
    }

    @objc func onToolBarDone() {
        // I use `editingDidEndOnExit` to simulate the `Done` behavior 
        // on the original keyboard.
        self.sendActions(for: .editingDidEndOnExit)
    }
}
0
AechoLiu

Dies ist der beste Weg, um die Done-Taste auf der Tastatur hinzuzufügen

textField.returnKeyType = UIReturnKeyDone;
0