我有一个文本字段,用户可以在其中输入汽车名称,我希望它在tableview中使用它下面的建议名称完成,我尝试了一些代码,但它有一些问题,当我第一次输入任何字符时,如“本田“它显示了阵列中的所有项目,而不是与本田名称相关的项目。一旦我们键入任何单词它显示列表,如果我们再次尝试重新键入它不显示任何列表。
我的代码是:
_carTable.dataSource=self;
_carTable.delegate=self;
[self.guideView addSubview:_carTable];
_carTable.hidden=YES;
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSLog(@"Range:%@",NSStringFromRange(range));
NSLog(@"%@",textField.text);
NSString *passcode = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"%@",passcode);
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"SELF CONTAINS %@",passcode];
carArray = [carArray filteredArrayUsingPredicate:predicate];
NSLog(@"%@", carArray);
if ([carArray count]==0) {
_carTable.hidden = TRUE;
}else{
_carTable.hidden = FALSE;
}
[_carTable reloadData];
return TRUE;
}
答案 0 :(得分:0)
您确定您的数组变量carArray
未从代码中的其他位置重置吗?
您获取表中所有汽车列表的原因是因为tableView仍在获取未经过筛选的完整汽车数组。
答案 1 :(得分:0)
你使用过单个carArray数组然后它有一些问题所以请使用全局数组。
编辑1:
在你的.h文件中 -
@property(nonatomic,retain) NSMutableArray * staticCarArray;
In.m文件 -
@synthesize sharedArray;
在viewDidLoad -
中staticCarArray = [[NSMutableArray alloc]init];
staticCarArray = [carArray mutableCopy];
编辑2: textField shouldChangeCharactersInRange此方法为其更改代码。
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"SELF CONTAINS %@",passcode];
carArray = [staticCarArray filteredArrayUsingPredicate:predicate];
NSLog(@"%@", carArray);