it-swarm.com.de

Wie füge ich die Schaltfläche "Fertig" auf der Tastatur über der Tastatur in IOS hinzu?

Ich möchte die Schaltfläche Done oben in iOS für eine Textansicht oben auf der Tastatur hinzufügen.

 enter image description here

Ich möchte etwas Ähnliches wie die obige Tastatur erreichen

21
TechGuy

Es kann mit Storyboard gemacht werden:

  1. Fügen Sie der Ansicht UIViewController UITextField hinzu.
  2. Fügen Sie UIToolbar in der ersten Ebene von UIViewController hinzu
  3. Fügen Sie UIBarButtonItem zur UIToolbar hinzu.
  4. Verbinden Sie UItoolbar mit IBOutlet mit dem Code.
  5. Verbinden Sie UIBarButtonItem mit IBAction (als didClick) mit dem Code.
  6. Das UITextField wird an UIViewController delegiert.
  7. Beenden Sie in der Funktion didClick die Bearbeitung (view.endEditing (true))
  8. In der Delegatfunktion sollte textFieldShouldBeginEditing Folgendes sein: textField.inputAccessoryView = toolbar und gibt true zurück.

 enter image description here

27
Ramis

Ich hoffe das hilft :)

UIToolbar* keyboardToolbar = [[UIToolbar alloc] init];
[keyboardToolbar sizeToFit];
UIBarButtonItem *flexBarButton = [[UIBarButtonItem alloc]
                                  initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                  target:nil action:nil];
UIBarButtonItem *doneBarButton = [[UIBarButtonItem alloc]
                                  initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                  target:self action:@selector(yourTextViewDoneButtonPressed)];
keyboardToolbar.items = @[flexBarButton, doneBarButton];
self.yourTextView.inputAccessoryView = keyboardToolbar;

und fügen Sie dann Ihre TextViewDoneButtonPressed-Methode hinzu

-(void)yourTextViewDoneButtonPressed
{
    [self.yourTextView resignFirstResponder];
}
24
Cong Tran

Swift 3:

func setDoneOnKeyboard() {
    let keyboardToolbar = UIToolbar()
    keyboardToolbar.sizeToFit()
    let flexBarButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let doneBarButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(InsertStatusVC.dismissKeyboard))
    keyboardToolbar.items = [flexBarButton, doneBarButton]
    self.fullNameTextField.inputAccessoryView = keyboardToolbar
}

@objc func dismissKeyboard() {
    view.endEditing(true)
}
23
Danny182

Diese Lösung für Swift3/4

Fügen Sie diese Zeile zu Ihrem Projekt als Erweiterung .__ hinzu. Ihr Problem ist gelöst.

  extension UITextField{

        @IBInspectable var doneAccessory: Bool{
            get{
                return self.doneAccessory
            }
            set (hasDone) {
                if hasDone{
                    addDoneButtonOnKeyboard()
                }
            }
        }

        func addDoneButtonOnKeyboard()
        {
            let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
            doneToolbar.barStyle = .default

            let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
            let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))

            let items = [flexSpace, done]
            doneToolbar.items = items
            doneToolbar.sizeToFit()

            self.inputAccessoryView = doneToolbar
        }

        @objc func doneButtonAction() {
            self.resignFirstResponder()
        }

    }

Vor Erweiterung 

 enter image description here

Nach Erweiterung 

 enter image description here

5
Anup Gupta

Füge UIToolBar als benutzerdefinierte Ansicht hinzu, die die Schaltfläche UIBarButtonItem als Done 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. ]; }

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)
  }
1
ViJay Avhad

Diese Lösung für Swift 4

override func viewDidLoad() {
   super.viewDidLoad()
   //init toolbar
   let toolbar:UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0,  width: self.view.frame.size.width, height: 30))
   //create left side empty space so that done button set on right side
   let flexSpace = UIBarButtonItem(barButtonSystemItem:    .flexibleSpace, target: nil, action: nil)
   let doneBtn: UIBarButtonItem = UIBarButtonItem(title: “Done”, style: .done, target: self, action: Selector(“doneButtonAction”))
   toolbar.setItems([flexSpace, doneBtn], animated: false)
   toolbar.sizeToFit()
   //setting toolbar as inputAccessoryView
   self.textField1.inputAccessoryView = toolbar
   self.textField2.inputAccessoryView = toolbar
}
func doneButtonAction() {
   self.view.endEditing(true)
}
0
Shoukat Mirza

Die Antwort von Ramis, mit der die Tastaturzubehöransicht mithilfe des Storyboards erstellt werden kann, ist eine großartige Strategie. Es ist immerhin 2017! (Sorry, aber ich habe nicht genug Punkte, um dich zu verteidigen.)

Lassen Sie mich etwas zur Antwort hinzufügen (um die SO -Regeln einzuhalten). Ich habe eine Ansicht mit mehreren Textfeldern. Nachdem ich die einzelnen Schritte von Ramis implementiert hatte, habe ich das AccessoryView an alle textFields auf folgende Weise angehängt:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
_activeTextField = textField;
[_activeTextField setInputAccessoryView:_iboKeyboardTools];
}

So einfach im Vergleich zu all dem im Code! Bauen Sie einfach die Zubehöransicht in Storyboard- auf und befestigen Sie sie immer wieder!

0
Steve W.

Lösung für Swift 4 Verwendung einer benutzerdefinierten Klasse. Sie können diese Klasse in Ihren Storyboard- und XIB-Dateien verwenden.

class UITextFieldWithDoneButton: UITextField {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.addDoneButtonOnKeyboard()
    }

    fileprivate func addDoneButtonOnKeyboard() {
        let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
        doneToolbar.barStyle = .default

        let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
        let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))

        let items = [flexSpace, done]
        doneToolbar.items = items
        doneToolbar.sizeToFit()

        self.inputAccessoryView = doneToolbar
    }

    @objc fileprivate func doneButtonAction() {
        self.resignFirstResponder()
    }
}
0
Kirill Kudaev