自动完成IOS中的数组字符

时间:2017-10-27 06:37:51

标签: ios autocomplete uitextfield

我有一个文本字段,用户可以在其中输入汽车名称,我希望它在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;

}

2 个答案:

答案 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);