キーボードが隠れているテキストフィールドがあります(Bluetoothで使用しているため)。ただし、iOS9では、ショートカットバーが表示され続けます。
それを隠す方法もありますか?
どうもありがとうございます!
ショートカットバーを削除するserNameTextFieldの代わりに、テキストフィールド名を渡すことができます。
UITextInputAssistantItem* item = [userNameTextField inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
In Swift 2.0
if #available(iOS 9.0, *) {
let item : UITextInputAssistantItem = yourTextView.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
} else {
// Fallback on earlier versions
}
同じ問題がありました。そして、SOの検索を開始します。したがって、上記は助けになりましたが、全体として、「iOS9の場合」は次のようにフレーム化するのが最適です。
if ([self respondsToSelector:@selector(inputAssistantItem)]) {
// iOS9.
UITextInputAssistantItem* item = [self inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
}
幸いなことに、UITextFieldのサブクラス(CHTextField)を作成し、どこでも使用されていました。したがって、オーバーライドされた「init」メソッドでこれを強打することは非常に簡単な修正でした。
それが役に立てば幸い。
または、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();
}
アプリのすべてのテキストフィールドに対してこれを行う簡単な方法は、UITextInputAssistantItem
にカテゴリを作成し、leadingBarButtonGroups
およびtrailingBarButtonGroups
のゲッターを次のようにオーバーライドすることです。
@implementation UITextInputAssistantItem (RemoveBars)
- (NSArray<UIBarButtonItemGroup *> *)leadingBarButtonGroups
{
return @[];
}
- (NSArray<UIBarButtonItemGroup *> *)trailingBarButtonGroups
{
return @[];
}
@end
これはiOS 9.xおよび8.xで機能し、条件付きコードは不要でした。
ただしこれに注意してください、これは[〜#〜] everything [〜#〜]のプロパティをオーバーライドします。これはUITextInputAssistantItem
を使用します
ここで他の答えを拡大します。特定のビューのすべてのサブビューをループし、すべての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
Swift 3.および4.で
self.textField.inputAssistantItem.leadingBarButtonGroups.removeAll()
self.textField.inputAssistantItem.trailingBarButtonGroups.removeAll()