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.
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)
}
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
}
}
}
https://stackoverflow.com/questions/14148276/toolbar-with-previous-and-next-for-keyboard-inputaccessoryview
Recommended Posts