Bil*_*ess 4 uisearchbar uisearchbardelegate ios ios7
好吧,我把头发拉过来.我几乎可以肯定我在某一点上也有这个工作,现在它不起作用了.
我有一个UISearchBar嵌入在表格视图中的单元格.我将搜索栏声明为属性,我的视图控制器设置为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");
}
Run Code Online (Sandbox Code Playgroud)
我已经排除了我的所有tableview设置以及所有这一切,它似乎都运行正常.这就是杀了我的原因.一切正常,所有其他委托方法......除了搜索按钮返回.请告诉我,我做的事情很愚蠢.我没有选择.
更新 我已经弄清楚了为什么搜索按钮无法执行的罪魁祸首.我删除了所有其他搜索栏委托方法,它开始工作......所以我一直评论它们,直到我发现哪一个导致了问题.
这家伙是我的罪魁祸首:
- (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];
}
Run Code Online (Sandbox Code Playgroud)
现在,搜索按钮实际上算作按键,我需要将其添加到允许的字符中吗?或者我是否需要为它添加一个检查以便允许它返回?任何帮助都会很棒.
更新2 我已经解决了我的问题.它结合了线索和启示,但我终于得到了它的工作.罪魁祸首是不允许字符集中的返回键.我在字符集中添加\n,然后搜索按钮无法正常工作.这是我更新的过滤器逻辑,用于显示添加的返回键,以及我的情况的有效字符集.一旦我被允许,我会自己回答.
- (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];
}
Run Code Online (Sandbox Code Playgroud)
Bil*_*ess 10
我在这里回答我自己的问题,所以我可以把事情搞清楚.在提出这个问题之后我不久就解决了这个问题.有趣的是如何工作.答案与其他用户相关,因此我会更新我的后代答案.
tl; dr是我不允许返回键-shouldChangeTextInRange.我有一组有限的字符被允许输入,我忘了将返回键包含为有效字符.
- (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];
}
Run Code Online (Sandbox Code Playgroud)
如果您也限制文本字段中的字符,这也可以发挥作用.这就是我最终解决问题的方法.我开始删除所有委托方法,直到找到阻止我的方法.一旦我弄清楚自己在做什么,我就会通过搜索文本字段问题来跟踪返回键.搜索栏没有很多问题,这就是我最后提出这个问题的原因.我可能在没有提出问题的情况下想出了这一点,但至少我学到了一些东西,希望这个答案将来会帮助其他人.
另外,感谢@mattt提供有关限制字符和思考代码库整体运行状况的更好方法的建议.
| 归档时间: |
|
| 查看次数: |
2712 次 |
| 最近记录: |