web-dev-qa-db-fra.com

Comment masquer la barre de raccourci dans iOS9

J'ai un champ de texte avec un clavier caché (depuis que je l'utilise avec Bluetooth). Cependant, dans iOS9, la barre de raccourcis continue à apparaître.

Y a-t-il un moyen de le cacher aussi?

Merci beaucoup!

34
Jordi Puigdellívol

Vous pouvez passer votre nom de champ de texte à la place de userNameTextField pour lequel vous souhaitez supprimer la barre de raccourcis. 

UITextInputAssistantItem* item = [userNameTextField inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
56
Dheeraj Singh

Dans Swift 2.0

if #available(iOS 9.0, *) {
    let item : UITextInputAssistantItem = yourTextView.inputAssistantItem
    item.leadingBarButtonGroups = []
    item.trailingBarButtonGroups = []
} else {
  // Fallback on earlier versions
}
13
OverD

J'ai eu le même problème. Et commence alors une recherche de SO. Donc, ce qui précède m'a aidé, mais l'ensemble, "si chose iOS9" pourrait être mieux encadrée comme ceci:

if ([self respondsToSelector:@selector(inputAssistantItem)]) {
    // iOS9.
    UITextInputAssistantItem* item = [self inputAssistantItem];
    item.leadingBarButtonGroups = @[];
    item.trailingBarButtonGroups = @[];
}

Heureusement, j'avais créé une sous-classe d'un UITextField (CHTextField) et j'étais utilisé partout. Il était donc très facile de résoudre ce problème avec la méthode "init" surchargée.

J'espère que ça aide.

9
Carl Hine

Sinon, créez simplement une extension pour UITextField dans Swift 2.0 comme ceci. 

extension UITextField
{
    public func hideAssistantBar()
    {
        if #available(iOS 9.0, *) {
           let assistant = self.inputAssistantItem;
            assistant.leadingBarButtonGroups = [];
            assistant.trailingBarButtonGroups = [];
        }
    }
}

Ensuite, vous pouvez simplement appeler hideAssistantBar () sur n’importe quel champ de texte de votre choix.

@IBOutlet weak var myTextField: UITextField?;

override public func viewDidLoad() {
    super.viewDidLoad();

    myTextField?.hideAssistantbar();
}
7
Jacob Joz

Un moyen simple de le faire pour tous les champs de texte de votre application est de créer une catégorie sur UITextInputAssistantItem et de remplacer les accesseurs pour leadingBarButtonGroups et trailingBarButtonGroups comme ceci:

@implementation UITextInputAssistantItem (RemoveBars)

- (NSArray<UIBarButtonItemGroup *> *)leadingBarButtonGroups
{
    return @[];
}

- (NSArray<UIBarButtonItemGroup *> *)trailingBarButtonGroups
{
    return @[];
}

@end

Cela a fonctionné pour moi sur iOS 9.x et 8.x, pas besoin de code conditionnel. 

Soyez prudent avec ceci cependant , cela remplace ces propriétés pourTOUTqui utilise UITextInputAssistantItem

5
jere

Juste pour développer les autres réponses ici. J'ai bricolé du code Swift 2.0 qui parcourrait toutes les sous-vues d'une vue donnée et désactivait les UITextInputAssistantItems pour tous les UITextFields et UISearchBars.

func hideTheAssistantBar(view:UIView) {
    //Check this view
    for case let textField as UITextField in view.subviews {
        let item : UITextInputAssistantItem = textField.inputAssistantItem
        item.leadingBarButtonGroups = []
        item.trailingBarButtonGroups = []
    }
    for case let searchBar as UISearchBar in view.subviews {
        let item : UITextInputAssistantItem = searchBar.inputAssistantItem
        item.leadingBarButtonGroups = []
        item.trailingBarButtonGroups = []
    }

    //Now find this views subviews
    let subviews = view.subviews

    for subview : AnyObject in subviews {
        if subview.isKindOfClass(UIView) {
            hideTheAssistantBar(subview as! UIView)
        }
    }
}

Vous pouvez ensuite appeler cette fonction en transmettant la vue dans laquelle vous souhaitez commencer. J'appelle cela à l'intérieur de ma méthode ViewDidLoad() et passe self.view comme hideTheAssistantBar(self.view).

En fait, je suis allé un peu plus loin pour mes besoins et j'ai ajouté cette fonction à une classe d'assistance que j'utilise pour le code courant. Par conséquent, dans ma fonction viewDidLoad(), j’appelle simplement helper.hideTheAssistantBar(self.view) et je n’ai pas à mettre cette fonction dans tous les fichiers.

J'espère que cela aidera quelqu'un qui cherche un moyen facile de supprimer la barre d'assistant de tous les UITextFields et UISearchBars en un seul échec.

Merci à @Arkader pour le code Swift permettant de rechercher récursivement toutes les sous-vues. Sous-listes de Swift

4
jones_corey

Dans Swift 3.0 et 4.0

self.textField.inputAssistantItem.leadingBarButtonGroups.removeAll()
self.textField.inputAssistantItem.trailingBarButtonGroups.removeAll()
1
Pranavan Sp