UISearchBarDelegate でインクリメンタルサーチ用のテキスト入力検知
8886 ワード
UISearchBarDelegate を使ってインクリメンタルサーチをするためのテキスト入力検知を実装してみたので、その備忘録。
日本語の入力はちょっと怪しい。(濁音、半濁音とか)
細かくテストはしていないので、バグがあるかもしれません。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
// ここでは空文字列検索はしない
if (![searchText isEqualToString:@""]) {
NSLog(@"keyword: %@", searchText);
[self searchKeyword:searchText];
}
}
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSLog(@"%@, %@, len:%@, loc:%@", searchBar.text, text, @(range.length), @(range.location));
BOOL isFirstCharacter = (range.location == 0 && range.length == 0);
BOOL isDeleteText = ([text isEqualToString:@""] && range.length > 0);
BOOL isInputtingText = (![searchBar.text isEqualToString:@""] && ![text isEqualToString:@""]);
BOOL hasNotEnterdYet = (isInputtingText && range.length == 0);
if (isFirstCharacter || isDeleteText || hasNotEnterdYet) {
[self searchKeyword:[self replceKeyword:searchBar.text
range:range
withString:text]];
return YES;
}
return YES;
}
- (nonnull NSString *)replceKeyword:(nonnull NSString *)keyword
range:(NSRange)range
withString:(nonnull NSString *)string
{
NSParameterAssert(keyword);
NSParameterAssert(string);
NSMutableString *result = [keyword mutableCopy];
BOOL isDeleteText = [string isEqualToString:@""];
if (isDeleteText) {
[result replaceCharactersInRange:range withString:string];
} else {
[result insertString:string atIndex:range.location];
}
NSLog(@"keyword: %@", result);
return result;
}
- (void)searchKeyword:(nonnull NSString *)keyword
{
// Search API
}
Documents
Author And Source
この問題について(UISearchBarDelegate でインクリメンタルサーチ用のテキスト入力検知), 我々は、より多くの情報をここで見つけました https://qiita.com/kNagadou/items/b49de80a17bdb6e67671著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .