web-dev-qa-db-de.com

So blenden Sie die Verknüpfungsleiste in iOS9 aus

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!

34

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 = @[];
56
Dheeraj Singh

In Swift 2.0

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

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.

9
Carl Hine

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();
}
7
Jacob Joz

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

5
jere

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

4
jones_corey

In Swift 3.0 und 4.0

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