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!
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 = @[];
Dans Swift 2.0
if #available(iOS 9.0, *) {
let item : UITextInputAssistantItem = yourTextView.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
} else {
// Fallback on earlier versions
}
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.
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();
}
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
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
Dans Swift 3.0 et 4.0
self.textField.inputAssistantItem.leadingBarButtonGroups.removeAll()
self.textField.inputAssistantItem.trailingBarButtonGroups.removeAll()