web-dev-qa-db-ja.com

iOS9でショートカットバーを非表示にする方法

キーボードが隠れているテキストフィールドがあります(Bluetoothで使用しているため)。ただし、iOS9では、ショートカットバーが表示され続けます。

それを隠す方法もありますか?

どうもありがとうございます!

37

ショートカットバーを削除するserNameTextFieldの代わりに、テキストフィールド名を渡すことができます。

UITextInputAssistantItem* item = [userNameTextField inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
57
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

同じ問題がありました。そして、SOの検索を開始します。したがって、上記は助けになりましたが、全体として、「iOS9の場合」は次のようにフレーム化するのが最適です。

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

幸いなことに、UITextFieldのサブクラス(CHTextField)を作成し、どこでも使用されていました。したがって、オーバーライドされた「init」メソッドでこれを強打することは非常に簡単な修正でした。

それが役に立てば幸い。

9
Carl Hine

または、Swift 2.0のようにUITextFieldの拡張機能を作成します。

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

アプリのすべてのテキストフィールドに対してこれを行う簡単な方法は、UITextInputAssistantItemにカテゴリを作成し、leadingBarButtonGroupsおよびtrailingBarButtonGroupsのゲッターを次のようにオーバーライドすることです。

@implementation UITextInputAssistantItem (RemoveBars)

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

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

@end

これはiOS 9.xおよび8.xで機能し、条件付きコードは不要でした。

ただしこれに注意してください、これは[〜#〜] everything [〜#〜]のプロパティをオーバーライドします。これはUITextInputAssistantItemを使用します

5
jere

ここで他の答えを拡大します。特定のビューのすべてのサブビューをループし、すべてのUITextFieldsおよびUISearchBarsのUITextInputAssistantItemsを無効にするいくつかのSwift 2.0コードをまとめました。

_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()メソッド内で呼び出し、hideTheAssistantBar(self.view)のように_self.view_を渡します。

実際に自分のニーズに合わせてさらに一歩進んで、この関数を一般的なコードに使用するヘルパークラスに追加しました。したがって、viewDidLoad()関数の内部では、実際にhelper.hideTheAssistantBar(self.view)を呼び出すだけで、すべてのファイルにその関数を配置する必要はありません。

これが、1回の失敗ですべてのUITextFieldsとUISearchBarsからアシスタントバーを削除する簡単な方法を探している人に役立つことを願っています。

すべてのサブビューを再帰的に検索するSwiftコードの@Arkaderに感謝します。 Swift List Subviews

4
jones_corey

Swift 3.および4.

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