Подтвердить что ты не робот

Как скрыть панель ярлыков в iOS9

У меня есть текстовое поле со скрытой клавиатурой (так как я использую его с bluetooth). Однако в iOS9 панель быстрого доступа продолжает появляться.

Есть ли способ скрыть это?

Большое вам спасибо!

4b9b3361

Ответ 1

Вы можете передать свое текстовое поле вместо userNameTextField, для которого вы хотите удалить панель ярлыков.

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

Ответ 2

В Swift 2.0

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

Ответ 3

У меня была такая же проблема. И так начинается поиск SO. Таким образом, вышеупомянутое помогло мне, но все, "если iOS9 вещь" может быть лучше всего обрамлено следующим образом:

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

К счастью, я создал подкласс UITextField (CHTextField) и использовался везде. Поэтому было очень легко исправить это в чрезмерном методе "init".

Надеюсь, что это поможет.

Ответ 4

В качестве альтернативы просто создайте расширение для UITextField в Swift 2.0, как это.

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

Затем вы можете просто вызвать hideAssistantBar() в любом текстовом поле, которое вам нравится.

@IBOutlet weak var myTextField: UITextField?;

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

    myTextField?.hideAssistantbar();
}

Ответ 5

Легкий способ сделать это для всех текстовых полей в вашем приложении - создать категорию на UITextInputAssistantItem и переопределить геттеры для leadingBarButtonGroups и trailingBarButtonGroups следующим образом:

@implementation UITextInputAssistantItem (RemoveBars)

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

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

@end

Это работало для меня на iOS 9.x и 8.x, не нужно никаких условных кодов.

Будьте осторожны с этим, хотя, это переопределяет эти свойства для ВСЕ, который использует UITextInputAssistantItem

Ответ 6

Просто поговорим о других ответах здесь. Я объединил некоторый код Swift 2.0, который будет проходить через все подпункты данного представления и отключить UITextInputAssistantItems для всех UITextFields и 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)
        }
    }
}

Затем вы можете вызвать эту функцию, передав любой вид, с которого вы хотите начать. Я называю это внутри моего метода ViewDidLoad() и передаю self.view как hideTheAssistantBar(self.view).

Я действительно сделал шаг вперед для своих нужд и добавил эту функцию в класс-помощник, который я использую для общего кода. Поэтому внутри моей функции ViewDidLoad() я просто вызываю helper.hideTheAssistantBar(self.view), а затем мне не нужно помещать эту функцию в каждый файл.

Надеюсь, что это поможет кому-то прийти к поиску простого способа удалить панель помощника из всех UITextFields и UISearchBars одним махом.

Благодаря @Arkader для быстрого кода, чтобы рекурсивно найти все subviews. Подвид Swift List