わかりました、私はこれで髪を引っ張っています。これもある時点で機能していたことはほぼ確実ですが、現在は機能していません。
UISearchBar
テーブルビューセルに埋め込まれています。プロパティとして宣言された検索バーがあり、View Controller は として設定されていUISearchBarDelegate
ます。検索バーが初期化され、構成され、すべてが見栄えがします。他のデリゲート メソッドに応答して、入力された文字を制限し、キャンセル ボタンを処理し、searchBarSearchButtonClicked
. 私は一体何を間違っているのですか?
これが私のセットアップの基本です:
ViewController.h
@interface SearchMLSNumberViewController : UIViewController <UISearchBarDelegate>
@property (strong, nonatomic) UISearchBar *searchField;
ViewController.m
// viewDidLoad
// init the search bar
self.searchField = [[UISearchBar alloc] init];
self.searchField.delegate = self;
self.searchField.autocorrectionType = UITextAutocorrectionTypeNo;
self.searchField.placeholder = NSLocalizedString(@"Search", @"Search");
// in my cell setup
CGRect frame = cell.contentView.frame;
[self.searchField setFrame:frame];
[cell.contentView addSubview:self.searchField];
// here is the delegate call that never fires for me
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
NSLog(@"search button pressed");
}
テーブルビューの設定をすべて除外しましたが、すべて正常に機能しているようです。それが私を殺しているのです。すべてが正常に機能しており、他のすべてのデリゲート メソッドは... 検索ボタンが返されることを除きます。私が愚かなことをしていると言ってください。私には選択肢がありません。
UPDATE 検索ボタンが実行に失敗する理由の原因を突き止めました。他のすべての検索バー デリゲート メソッドを削除したところ、機能し始めました...そのため、どれが問題を引き起こしているかがわかるまで、それらをすべてコメントアウトしました。
この男は私の犯人です:
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,-"] invertedSet];
NSString *filtered = [[text componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
return [text isEqualToString:filtered];
}
では、検索ボタンは実際にキーの押下としてカウントされ、許可された文字に追加する必要がありますか? それとも、返品できるようにチェックを追加する必要がありますか? どんな助けでも素晴らしいでしょう。
更新 2 問題を解決しました。手がかりと啓示の組み合わせが必要でしたが、ついに機能しました。犯人は、文字セットでリターン キーを許可していませんでした。文字セットに \n を追加すると、検索ボタンが正しく機能しませんでした。これは、追加された return キーと、私の状況で有効な文字セットを示す、更新されたフィルター ロジックです。許可されたら、自分でこれに答えます。
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,-\n"] invertedSet];
NSString *filtered = [[text componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
return [text isEqualToString:filtered];
}