iOS中tableview中的动态搜索
Posted
技术标签:
【中文标题】iOS中tableview中的动态搜索【英文标题】:Dynamic searching in tableview in iOS 【发布时间】:2015-12-10 18:29:50 【问题描述】:我有一个tableview
和文本字段,我在其中实现了搜索方法。现在,当我在textfield
中写入一些值并单击搜索按钮时,它会在tableview
中搜索。但是,我希望它是动态的,这意味着在我开始输入textfield
的那一刻,它应该开始搜索而无需单击任何button
。
我该怎么做?
【问题讨论】:
请在此处发布您的代码。 【参考方案1】:要在ios中实现动态搜索,我们也可以使用文本框作为搜索栏。
转到 StoryBoard 并进行以下更改
-
将文本框添加到视图控制器并分配出口和代表。
现在到 viewcontroller.m 并粘贴以下代码
-(void)textFieldDidChange:(UITextField *)textField
searchTextString=textField.text;
[self updateSearchArray:searchTextString];
-(void)updateSearchArray:(NSString *)searchText
if(searchText.length==0)
isFilter=NO;
else
isFilter=YES;
searchArray=[[NSMutableArray alloc]init];
for(NSString *string in responceArray)
NSRange stringRange = [[NSString stringWithFormat:@"%@",string]
rangeOfString:searchtext.text options:NSCaseInsensitiveSearch];
if (stringRange.location != NSNotFound)
[searchArray addObject:string];
[jobsTable reloadData];
【讨论】:
【参考方案2】:只需在TextField
的Editing Changed Event
上连接此方法即可。所以,当你改变它的值时,这个方法就会被调用。
- (IBAction)txtValueChanged:(UITextField)sender
[self dynamicSearchInto:sender.text];
//From here, we are passing text of textField.
这里,allData
是一个 array
,其中包含您的所有数据。而searchArray
是一个仅包含搜索数据的数组。所以请确保,您必须将searchArray
的计数设置为tableview's
行计数。并根据searchArray
将数据设置到tableview中。
-(void)dynamicSearchInto:(NSString *)strText
if (strText.length != 0)
searchArray = [[NSArray alloc]init];
NSString *str=txtSearch.text;
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"SELF['yourKey'] contains[c] %@", str];
searchArray = [allData filteredArrayUsingPredicate:predicate];
[myTableView reloadData];
else
searchArray = allData;
[myTableView reloadData];
希望,这就是您要找的。有任何问题可以联系我。
【讨论】:
【参考方案3】:连接方法与点击连接检查器中的事件值更改(参见最底部的屏幕截图)相同。
【讨论】:
@NileshJha 如果我的回答解决了你的问题 - 请你接受它(它可能对其他人有帮助)?以上是关于iOS中tableview中的动态搜索的主要内容,如果未能解决你的问题,请参考以下文章
iOS 11 中的 SearchController。无法触摸任何 tableView 单元格
Swift iOS - 如何在按下单元格之前从 TableView 的所有 IndexPath 中获取数据
Snapkit:如何在 scrollView 中嵌入一个简单的 tableView?