2015-09-16 19 views

Odpowiedz

53

Możesz podać nazwę pola tekstowego zamiast userNameTextField, dla której chcesz usunąć pasek skrótów.

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

Tak, z przedrostkiem 'is_grater__or_equal_than (9,0)' lub zawiesisz w niższych wersjach –

+0

@Dheeraj - w jaki sposób należy to zrobić w kodzie Xamarin.iOS C#? W tym kontekście InputAssistanceItem wydaje się być tylko do odczytu (http://stackoverflow.com/questions/37442203/xamarin-ios-remove-shortcut-bar-from-picker) – jbyrd

+0

Proszę, może ktoś mi powiedzieć, gdzie musimy użyć to 3 linie – Balu

12

w Swift 2.0

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

Po prostu dla FYI, musisz wywołać to na każdym UITextView lub UITextField (w zasadzie wszystko, co pojawia się na klawiaturze), ponieważ każde pole wejściowe ma swój własny UITextInputAssistantItem. – TenaciousJay

9

miałem ten sam problem. I tak rozpoczyna się wyszukiwanie SO. Więc powyższe mi pomógł, ale cały „jeśli iOS9 rzeczą” może być najlepszy w ramce tak:

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

szczęśliwie, ja stworzył podklasę w UITextField (CHTextField) i był w używać wszędzie. Było to bardzo łatwe do naprawienia w nadpobudliwej metodzie "init".

Mam nadzieję, że to pomaga.

3

Po prostu, aby rozwinąć inne odpowiedzi tutaj. Zrobiłem kilka kodu Swift 2.0, który przejdzie przez wszystkie subviews danego widoku i wyłączy UITextInputAssistantItems dla wszystkich UITextFields i 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) 
     } 
    } 
} 

Możesz wtedy wywołać tę funkcję przechodząc w dowolnym widoku, od którego chcesz zacząć. Nazwałem to wewnątrz mojej metody ViewDidLoad() i przekazałem w self.view jak hideTheAssistantBar(self.view).

Rzeczywiście poszedłem o krok dalej w moich potrzebach i dodałem tę funkcję do klasy pomocnika używanej do wspólnego kodu. Dlatego wewnątrz mojej funkcji viewDidLoad() po prostu nazywam się helper.hideTheAssistantBar(self.view), a następnie nie muszę umieszczać tej funkcji w każdym pliku.

Mamy nadzieję, że pomoże to komuś w znalezieniu prostego sposobu na usunięcie paska asystenta z wszystkich UITextFields i UISearchBars za jednym zamachem.

Dzięki @Arkader za szybki kod, aby rekurencyjnie znaleźć wszystkie subviews. Swift List Subviews

6

Alternatywnie, po prostu utwórz rozszerzenie dla UITextField w Swift 2.0 w ten sposób.

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

Następnie możesz po prostu wywołać hideAssistantBar() w dowolnym polu tekstowym, które lubisz.

@IBOutlet weak var myTextField: UITextField?; 

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

    myTextField?.hideAssistantbar(); 
} 
5

Łatwym sposobem, aby to zrobić dla wszystkich pól tekstowych w aplikacji jest stworzenie kategorię na UITextInputAssistantItem i zastępują pobierające dla leadingBarButtonGroups i trailingBarButtonGroups jak ten:

@implementation UITextInputAssistantItem (RemoveBars) 

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

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

@end 

ten pracował dla mnie na iOS 9.x i 8.x, nie ma potrzeby stosowania żadnego kodu warunkowego.

Bądź ostrożny z tym chociaż, zastępuje te właściwości WSZYSTKIEGO który używa UITextInputAssistantItem

+1

Wydaje się, że jest to zdecydowanie najłatwiejsze podejście. Działa poprawnie na 9.3. – nickdnk

+1

Jest to w rzeczywistości jedyny sposób, w jaki znalazłem to, co nie wycieknie. – Eagle11

+0

To podejście nie powoduje przecieku pamięci i prawdopodobnie jest teraz lepszą odpowiedzią. – AndyTang

Powiązane problemy