[SWIFT] Extension pour ajouter le bouton haut / bas et le bouton Terminer à UIToolBar

introduction

Je vois souvent des formulaires de saisie avec des boutons haut / bas et de finition sur le clavier. J'apprécie vraiment ce genre de considération: étreindre: Cette fois, j'ai créé une extension qui les implémente simplement en ajoutant une phrase, donc je vais la présenter.

Image post-montage

Bouton Terminé uniquement

uitoolbar_done.gif

Bouton haut / bas et bouton de finition

uitoolbar_updowndone.gif

Comment utiliser

Bouton Terminé uniquement

override func viewDidLoad() {
    super.viewDidLoad()
    //Définissez le bouton Terminé sur la barre d'outils du clavier lorsque le champ de texte cible est actif.
    addPreviousNextableDoneButtonOnKeyboard(textFields: [textField1], previousNextable: false)
}

Bouton haut / bas et bouton de finition

override func viewDidLoad() {
    super.viewDidLoad()
    //Définissez les boutons avant / arrière et de finition sur la barre d'outils du clavier lorsque le champ de texte cible est actif.
    addPreviousNextableDoneButtonOnKeyboard(textFields: [textField2, textField3], previousNextable: true)
}

Extension


//
//  ViewController+ToolBar.swift
//  KeyboardUpDownSample
//
//  Created by Miharu Naruse on 2020/11/15.
//

//Site source de référence
// - URL:: https://stackoverflow.com/questions/14148276/toolbar-with-previous-and-next-for-keyboard-inputaccessoryview

import Foundation
import UIKit

extension UIViewController {
    ///Processus de définition des boutons de va-et-vient et du bouton Terminer sur la barre d'outils du clavier lorsque le champ de texte cible est actif.
    /// - Parameters:
    ///   - textFields:Tableau de champs de texte que vous souhaitez définir
    ///   - previousNextable:Activer ou non les boutons avant et arrière
    ///
    ///Comment utiliser
    /// =============================================
    ///     //Paramètres de la barre d'outils du clavier du champ de texte
    ///     addPreviousNextableDoneButtonOnKeyboard(textFields: [textField1], previousNextable: false)
    ///     addPreviousNextableDoneButtonOnKeyboard(textFields: [textField2, textField3], previousNextable: true)
    ///
    func addPreviousNextableDoneButtonOnKeyboard(textFields: [UITextField], previousNextable: Bool = false) {
        for (index, textField) in textFields.enumerated() {
            //Le traitement en boucle est effectué pour chaque champ de texte.
            let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
            toolBar.barStyle = .default
            ///Élément de bouton de barre
            var items = [UIBarButtonItem]()

            // MARK:Paramètres des boutons avant et arrière

            if previousNextable {
                //Lorsque les boutons avant et arrière sont activés
                ///Bouton fléché vers le haut
                let previousButton = UIBarButtonItem(image: UIImage(systemName: "chevron.up"), style: .plain, target: self, action: nil)
                if textField == textFields.first {
                    //Désactivez le champ de texte supérieur dans le tableau de champs de texte que vous souhaitez définir.
                    previousButton.isEnabled = false
                } else {
                    //Autre que ce qui précède
                    //Définissez le champ de texte précédent comme cible.
                    previousButton.target = textFields[index - 1]
                    //Concentrez-vous sur la cible.
                    previousButton.action = #selector(UITextField.becomeFirstResponder)
                }

                ///Espace fixe
                let fixedSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.fixedSpace, target: self, action: nil)
                fixedSpace.width = 8

                ///Bouton fléché vers le bas
                let nextButton = UIBarButtonItem(image: UIImage(systemName: "chevron.down"), style: .plain, target: self, action: nil)
                if textField == textFields.last {
                    //Dans le champ de texte du bas du tableau de champs de texte que vous souhaitez définir, désactivez-le.
                    nextButton.isEnabled = false
                } else {
                    //Autre que ce qui précède
                    //Définissez le champ de texte suivant comme cible.
                    nextButton.target = textFields[index + 1]
                    //Concentrez-vous sur la cible.
                    nextButton.action = #selector(UITextField.becomeFirstResponder)
                }

                //Ajoutez des boutons avant et arrière aux éléments de bouton de barre.
                items.append(contentsOf: [previousButton, fixedSpace, nextButton])
            }

            // MARK:Paramètres du bouton Terminé

            let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
            let doneButton = UIBarButtonItem(title: "Terminé", style: .done, target: view, action: #selector(UIView.endEditing))
            //Ajoutez un bouton Terminé à l'élément du bouton de la barre.
            items.append(contentsOf: [flexSpace, doneButton])

            toolBar.setItems(items, animated: false)
            toolBar.sizeToFit()

            textField.inputAccessoryView = toolBar
        }
    }
}

Site source de référence

https://stackoverflow.com/questions/14148276/toolbar-with-previous-and-next-for-keyboard-inputaccessoryview

Recommended Posts

Extension pour ajouter le bouton haut / bas et le bouton Terminer à UIToolBar
Comment configurer et utiliser kapt
[Rails] [Note] Quand ajouter = à <%%> et quand pas
Ajoutez une botte de printemps et un dégradé à éclipse
Comment configurer et utiliser jEnv (Mac)
algorithme java Artery Time arrondi vers le haut et vers le bas
[Swift5] Comment arrondir, arrondir et arrondir les deuxième et troisième points minoritaires