0
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

我放

NSAssert([searchBar.text isEqualToString:searchText],@"Search Bar Must Be The Same"); 

在那里,它似乎没有被违反

我只是想确定一下,因为这有点奇怪。

如果参数之一,即 searchText 可以简单地通过询问 searchBar.text 得到,为什么还要有 2 个参数,searchBar 和 searchText

为什么不只是有

-(void)searchBarTextDidChange:(UISearchBar *) searchBar

或 -(void)textDidChangeForSearchBar:(UISearchBar *) searchBar

正在做

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

意味着 searchText 带有基本信息,这意味着 searchBar.text 可能与 searchText 不同。从来都不是。当然,除非你改变一些事情。

事实上,我怀疑 searchText 要么指向 searchBar.text 要么只是它的一个副本。

4

2 回答 2

2

我会说这只是一个编码标准。

委托方法的第一个参数应该是调用类是一个很好的做法

所以(void)searchBar:(UISearchBar *)searchBar遵循。

现在,如果您省略textDidChange:(NSString *)searchTextwhich can be retrieved fromsearchBar.Text
那么我和 Apple 都没有为这种方法找到一个好名字。

于 2012-12-13T11:32:08.237 回答
1

我还检查了所有可能的情况。我认为提供另一个参数的唯一区域是使这两个函数保持一致

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
于 2012-12-13T11:48:44.523 回答