15

と を使用する iPhone アプリがUISearchBarありUISearchDisplayControllerます。検索バーには 3 つのスコープ ボタンがあります。特定のスコープ ボタンが選択されているときはキーボードをテンキーパッドにして、他のスコープ ボタンが選択されているときはデフォルトのキーボードにしたいと考えています。

私は次のようにメソッドを実装しましたUISearchBarDelegate selectedScopeButtonIndexDidChange:selectedScope

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope
{
    switch (selectedScope) {
        case DeviceIDScopeIndex:
            searchBar.keyboardType = UIKeyboardTypeNumberPad;
            break;
        default:
            searchBar.keyboardType = UIKeyboardTypeDefault;
            break;
    }
}

メソッドが呼び出され、問題のボタンが選択されたときに適切なケースがトリガーされることはわかっています。しかし、キャンセルボタンをタップしてキーボードを非表示にし、検索フィールドをもう一度タップしてキーボードを再び表示しない限り、オンスクリーンキーボードは変更されません。

キーボードが画面に表示されている間にキーボードを変更する方法、またはプログラムで非表示にしてから再表示する方法はありますか?

4

3 に答える 3

28

iOS 3.2 以降を使用している場合は、次のように呼び出すことができます。

[searchBar reloadInputViews]

ハッカーなしですぐに切り替わります。少なくとも、これは UITextField で機能します。(これについて言及するのは、辞任/ファーストレスポンダーになるトリックが私にとって正確に機能しなかったためですが、 reloadInputViews は機能しました。)

于 2012-03-19T17:20:49.080 に答える
23

これは一種のハックですが、これは私にとってはうまくいきました:

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {


    switch (selectedScope) {
    case 0:
       searchBar.keyboardType = UIKeyboardTypeNumberPad;
        break;
   default:
        searchBar.keyboardType = UIKeyboardTypeDefault;
        break;


    // Hack: force ui to reflect changed keyboard type
    [searchBar resignFirstResponder];
    [searchBar becomeFirstResponder];

}
于 2009-10-25T23:29:07.120 に答える
1
[searchBar reloadInputViews] 

[searchBar resignFirstResponder];
[searchBar becomeFirstResponder];

どちらも機能しますが、2 番目の方法には副作用があり、firstResponder を変更し、キーボードの通知をトリガーできるため、キーボードの通知に依存する他のロジックに影響を与え、キーボード フレームの変更に依存するビューのフレームに影響を与える可能性があります。

于 2012-05-22T04:23:45.637 に答える