1

私の iOS App では、in のカスタムinputViewを設定する必要があります。UISearchBariOS7

だから私は次のコードを書きました。

NSArray *searchBarSubViews = [[self.sBar.subviews objectAtIndex:0] subviews];
            for(int i =0; i<[searchBarSubViews count]; i++) {
                if([[searchBarSubViews objectAtIndex:i] isKindOfClass:[UITextField class]])
                {
                    UITextField* search=(UITextField*)[searchBarSubViews objectAtIndex:i];
                    [search setFont:[UIFont fontWithName:@"CustomFont" size:15]];
                    search.delegate = self;

                    [search setInputView:self.customKeyboard];
                    [self.customKeyboard setTextView:search];
                }
            }

正常に動作しています。ただし、カスタム キーボードで入力して [キャンセル] ボタンをタップすると、resignFirstResponder.

もう一度タップすると、ネイティブの英語キーボードを含め、UISearchBarテキストを入力できません。UISearchBar

また、キャンセルボタンが隠れて機能しUISearchBarなくなりました。

なぜ起こっているのかわからない?

どうすれば解決できますか?

4

1 に答える 1

1

あなたのコードを試してみましたが、私のアプリでは問題なく動作しています。実際、このサイトの他のユーザーがより精巧な回避策を構築しなければならなかった問題を、なんらかの理由で解決したように見えるため、感謝とお祝いを申し上げたいと思います。

私のアプリでは、検索バーの選択範囲に応じてキーボードが変化します。

  • scope == 0 は私の CustomKeyboard を提示します
  • scope != 0 は通常の iPhone キーボードを表示します。

あなたのコードの私の実装は次のようになります。

-(UITextField *)textFieldFormSearchBar{

NSArray *searchBarSubViews = [[self.searchBar.subviews objectAtIndex:0] subviews];
for(int i =0; i<[searchBarSubViews count]; i++) {
    if([[searchBarSubViews objectAtIndex:i] isKindOfClass:[UITextField class]])
    {
        UITextField* search=(UITextField*)[searchBarSubViews objectAtIndex:i];
        return search;
    }
}
return nil;
}

-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{

if (searchBar.selectedScopeButtonIndex==0) {
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=self.customKeyboard;
    self.customKeyboard.field=self.textFieldFormSearchBar;
}
else{
    if (self.customKeyboard.superview!=nil) [self.customKeyboard removeFromSuperview];
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=nil;
    self.customKeyboard.field=nil;
}
return YES;
}

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

if (selectedScope==0) {
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=self.customKeyboard;
    self.customKeyboard.field=self.textFieldFormSearchBar;
}
else{
    if (self.customKeyboard.superview!=nil) [self.customKeyboard removeFromSuperview];
    self.textFieldFormSearchBar.delegate = self;
    self.textFieldFormSearchBar.inputView=nil;
    self.customKeyboard.field=nil;
}
[self.textFieldFormSearchBar reloadInputViews];
}

-(BOOL)searchBarShouldEndEditing:(HDLSearchBar *)searchBar{

if (self.customKeyboard) {
    [self.customKeyboard removeFromSuperview];
}
return [self.textFieldFormSearchBar resignFirstResponder];
}

おそらく最も効率的な方法ではありませんが、うまくいきます。あなたの問題を解決するのに役立つ何かが見つかることを願っています。

于 2013-11-03T10:34:51.267 に答える