UISearchBarですべてのテキストを選択する方法はありますか?[searchBar selectALL:]を試しましたが、シグナルがスローされます(認識されないセレクター)。
ユーザーが以前の検索テキストを変更できるようにしたい。ある時点で、ユーザーが新しいリクエストを入力し始めたときに、古いリクエストを却下する必要があります。それを達成するための標準的な方法-テキストの編集を開始する瞬間にすべてのテキストを選択します。
UISearchBarですべてのテキストを選択する方法はありますか?[searchBar selectALL:]を試しましたが、シグナルがスローされます(認識されないセレクター)。
ユーザーが以前の検索テキストを変更できるようにしたい。ある時点で、ユーザーが新しいリクエストを入力し始めたときに、古いリクエストを却下する必要があります。それを達成するための標準的な方法-テキストの編集を開始する瞬間にすべてのテキストを選択します。
これは、標準の UIResponder セマンティクスを使用して実現できます。UISearchBar のプライベート ビュー階層を掘り下げる必要はありません。
[[UIApplication sharedApplication] sendAction:@selector(selectAll:) to:nil from:nil forEvent:nil]
これはどこからでも呼び出すことができ、selectAll:
セレクターはレスポンダー チェーンを実行して、それに応答するオブジェクトがあるかどうかを確認します。検索バーが現在最初の応答者であると仮定すると (ユーザーが入力している場合)、応答し、結果はすべてのテキストが選択されます。そうでない場合はbecomeFirstResponder
、検索バーで呼び出して、最初のレスポンダーにすることができます。
[_mySearchBar becomeFirstResponder]
[[UIApplication sharedApplication] sendAction:@selector(selectAll:) to:nil from:nil forEvent:nil]
UITextField内のテキストを選択することで得られる「置換するタイプ」機能が必要な場合 (つまり、十字を余分にタップするのは受け入れられない場合)、UISearchBar のサブビューを掘り下げてUITextField (または UISearchBarTextField) を見つけ、選択することができます。そのテキスト:
// need to select the searchBar text ... UITextField * searchText = nil; for (UIView *subview in searchBar.subviews) { // we can't check if it is a UITextField because it is a UISearchBarTextField. // Instead we check if the view conforms to UITextInput protocol. This finds // the view we are after. if ([subview conformsToProtocol:@protocol(UITextInput)]) { searchText = (UITextField*)subview; break; } } if (searchText != nil) [searchText selectAll:self];
selectAll(_:)
私の場合、を呼び出した直後に送信が機能しませんでしたbecomeFirstResponder
。
私は1つの実行ループを待つことでそれを回避しました:
スウィフト 2:
dispatch_async(dispatch_get_main_queue()) {
UIApplication.sharedApplication().sendAction(#selector(UITextField.selectAll(_:)), to: nil, from: nil, forEvent: nil)
}
スウィフト 3:
DispatchQueue.main.async(execute: {
UIApplication.sharedApplication().sendAction(#selector(UITextField.selectAll(_:)), to: nil, from: nil, forEvent: nil)
})
もう 1 つの提案があります。誰かが検索バーをアクティブにすると、次の 2 つの意図が考えられます。新しいテキストを入力するか、既存のテキストに追加します。ユーザーに選択肢を与えるべきだと思います。
テキストを追加したい場合は、自然に既存のテキストの最後をもう一度タップします。
最初からやり直したい場合は、検索バーがアクティブになると自動的に表示されるクリア ボタンを押すことができます。
BOOL
これは、検索バーのテキストフィールドの編集が開始されたばかりかどうかを示すことで実現できます。次に、searchBarデリゲートメソッドで最初に押されたキーをキャッチできます。
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
firstEdit = YES;
}
- (BOOL)searchBar:(UISearchBar *)searchBar
shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text {
if (firstEdit) {
searchBar.text = text;
firstEdit = NO;
}
return YES;
}
すべてのテキストを選択する方法はないと思います。おそらく、フォーカスがある場合は、次のようUISearchBar
に検索バーをクリアできます-searchBar.text = @""
つまり、検索バーのクリアテキスト...これが何らかの形で役立つことを願っています...