Ich habe ein Textfeld mit einer verborgenen Tastatur (da ich es mit Bluetooth verwende). In iOS9 wird die Shortcut-Leiste jedoch weiterhin angezeigt.
Gibt es eine Möglichkeit, es auch zu verstecken?
Ich danke dir sehr!
Sie können den Namen Ihres Textfelds anstelle von userNameTextField angeben, für den Sie die Shortcut-Leiste entfernen möchten.
UITextInputAssistantItem* item = [userNameTextField inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
In Swift 2.0
if #available(iOS 9.0, *) {
let item : UITextInputAssistantItem = yourTextView.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
} else {
// Fallback on earlier versions
}
Ich hatte das gleiche Problem. Und so beginnt die Suche nach SO. Das Obige hat mir also geholfen, aber das Ganze "Wenn iOS9-Ding" könnte am besten so aussehen:
if ([self respondsToSelector:@selector(inputAssistantItem)]) {
// iOS9.
UITextInputAssistantItem* item = [self inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
}
Glücklicherweise hatte ich eine Unterklasse eines UITextField (CHTextField) erstellt und wurde überall verwendet. Es war also eine sehr einfache Lösung, dies in der überfahrenen "init" -Methode zu finden.
Ich hoffe es hilft.
Alternativ können Sie einfach eine Erweiterung für UITextField in Swift 2.0 erstellen.
extension UITextField
{
public func hideAssistantBar()
{
if #available(iOS 9.0, *) {
let assistant = self.inputAssistantItem;
assistant.leadingBarButtonGroups = [];
assistant.trailingBarButtonGroups = [];
}
}
}
Dann können Sie hideAssistantBar () für ein beliebiges Textfeld aufrufen.
@IBOutlet weak var myTextField: UITextField?;
override public func viewDidLoad() {
super.viewDidLoad();
myTextField?.hideAssistantbar();
}
Eine einfache Möglichkeit, dies für alle Textfelder in Ihrer App zu tun, ist das Erstellen einer Kategorie für UITextInputAssistantItem
und das Überschreiben der Getter für leadingBarButtonGroups
und trailingBarButtonGroups
wie folgt:
@implementation UITextInputAssistantItem (RemoveBars)
- (NSArray<UIBarButtonItemGroup *> *)leadingBarButtonGroups
{
return @[];
}
- (NSArray<UIBarButtonItemGroup *> *)trailingBarButtonGroups
{
return @[];
}
@end
Dies funktionierte für mich unter iOS 9.x und 8.x, kein bedingter Code erforderlich.
Seien Sie vorsichtig damit , dies überschreibt die Eigenschaften fürALLESdas UITextInputAssistantItem
verwendet
Nur um die anderen Antworten hier zu erweitern. Ich habe etwas Swift 2.0-Code zusammengeschustert, der alle Unteransichten einer Ansicht durchläuft und die UITextInputAssistantItems für alle UITextFields und UISearchBars deaktiviert.
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)
}
}
}
Sie können diese Funktion dann in der Ansicht aufrufen, in der Sie beginnen möchten. Ich nenne das innerhalb meiner ViewDidLoad()
-Methode und gebe self.view
wie hideTheAssistantBar(self.view)
weiter.
Ich ging sogar noch einen Schritt weiter und fügte diese Funktion zu einer Hilfsklasse hinzu, die ich für allgemeinen Code verwende. Deshalb rufe ich in meiner viewDidLoad()
-Funktion eigentlich nur helper.hideTheAssistantBar(self.view)
auf und muss diese Funktion dann nicht in jede Datei einfügen.
Ich hoffe, dies hilft jemandem, der nach einer einfachen Möglichkeit sucht, die Assistentenleiste von allen UITextFields und UISearchBars mit einem Fehler zu entfernen.
Vielen Dank an @Arkader für den Swift-Code, um alle Unteransichten rekursiv zu finden. Swift List Subviews
In Swift 3.0 und 4.0
self.textField.inputAssistantItem.leadingBarButtonGroups.removeAll()
self.textField.inputAssistantItem.trailingBarButtonGroups.removeAll()