2015-09-16 5 views

Antwort

53

Sie können Ihren Textfeldnamen anstelle von userNameTextField übergeben, für die Sie die Verknüpfungsleiste entfernen möchten.

UITextInputAssistantItem* item = [userNameTextField inputAssistantItem]; 
item.leadingBarButtonGroups = @[]; 
item.trailingBarButtonGroups = @[]; 
+0

Ja, Präfix mit einem 'is_grater__or_equal_than (9.0)', oder es wird in niedrigeren Versionen –

+0

@Dheeraj Absturz verwendet - wie würde Dies geschieht in Xamarin.iOS C# -Code? In diesem Rahmen scheint InputAssistanceItem schreibgeschützt zu sein (http://stackoverflow.com/questions/37442203/xamarin-ios-remove-shortcut-bar-from-picker). – jbyrd

+0

Bitte kann mir irgendjemand sagen, wo wir hin müssen Diese 3 Zeilen – Balu

12

In Swift 2,0

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

Nur FYI, Sie müssen dies auf jedem UITextView oder UITextField aufrufen (im Grunde alles, was die Tastatur auftaucht), da jedes Eingabefeld sein eigenes UITextInputAssistantItem hat. – TenaciousJay

9

hatte ich das gleiche Problem. Und so beginnt eine Suche nach SO. So halfen die über mir, aber das Ganze „wenn iOS9 Sache“ könnte am besten wie folgt gestaltet werden:

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

Glücklicherweise habe ich eine Unterklasse eines UITextField erstellt, (CHTextField) und war in überall verwenden. Es war also eine sehr einfache Lösung, dies in der überforderten "init" -Methode zu vereiteln.

Ich hoffe, es hilft.

3

Nur um die anderen Antworten hier zu erweitern. Ich habe einen Swift 2.0-Code zusammengeschustert, der alle Teilansichten einer bestimmten 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 dann in dieser Funktion Gang nennen, wie Ansicht, die Sie möchten auf starten. Ich nenne dies innerhalb meiner ViewDidLoad() Methode und übergeben Sie self.view wie hideTheAssistantBar(self.view).

Ich ging tatsächlich einen Schritt weiter für meine Bedürfnisse und fügte diese Funktion einer Hilfsklasse hinzu, die ich für gemeinsamen Code verwende. Daher innerhalb meiner viewDidLoad() Funktion ich eigentlich nur anrufen helper.hideTheAssistantBar(self.view) und dann muss ich nicht diese Funktion in jeder Datei zu setzen.

Hoffen, dass dies hilft jemand auf der Suche nach einer einfachen Möglichkeit, die Assistentenleiste aus allen UITextFields und UISearchBars in einem Fehler zu entfernen.

Dank @Arkader für den schnellen Code rekursiv alle Unteransichten zu finden. Swift List Subviews

6

Alternativ erstellen Sie einfach eine Erweiterung für UITextField in Swift 2.0 wie folgt.

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

Dann können Sie einfach hideAssistantBar() in einem beliebigen Textfeld aufrufen.

@IBOutlet weak var myTextField: UITextField?; 

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

    myTextField?.hideAssistantbar(); 
} 
5

Eine einfache Möglichkeit, dies für alle Textfelder in Ihrer Anwendung zu tun ist, eine Kategorie UITextInputAssistantItem und überschreibt die Getter für leadingBarButtonGroups und trailingBarButtonGroups wie diese zu erstellen:

@implementation UITextInputAssistantItem (RemoveBars) 

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

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

@end 

Das ist für mich gearbeitet iOS 9.x und 8.x, kein bedingter Code erforderlich.

mit diesem obwohl Seien Sie vorsichtig, überschreibt diese, diese Eigenschaften für ALLES die UITextInputAssistantItem

+1

Dies scheint bei weitem der einfachste Ansatz. Funktioniert gut am 9.3. – nickdnk

+1

Dies ist eigentlich die einzige Möglichkeit, die ich gefunden habe, die nicht auslaufen wird. – Eagle11

+0

Dieser Ansatz verliert keinen Speicher und ist wahrscheinlich die bessere Antwort für den Moment. – AndyTang

Verwandte Themen