来自Objective c中数组项的自动完成文本字段
Posted
技术标签:
【中文标题】来自Objective c中数组项的自动完成文本字段【英文标题】:AutoComplete txtfield from array items in Objective c 【发布时间】:2017-11-13 11:50:12 【问题描述】:我有一个文本字段,每当用户在其中输入时,它都会显示tableView
中数组中的相关项目以选择其中任何一个,但是当用户在 small 关键字中输入任何内容时,它不会显示数组。当用户以大写字母输入任何单词作为存储在数组中时,它会显示该数组。
我希望当用户输入任何单词时,无论是小写字母还是大写字母,它都应该显示包含数组的表格视图。以下是我的代码,
-(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 = [_staticCarArray filteredArrayUsingPredicate:predicate];
city = [_staticCarArrays filteredArrayUsingPredicate:predicate];
NSLog(@"%@", carArray);
NSLog(@"%@", city);
if ([carArray count]==0)
_carTable.hidden = TRUE;
else
_carTable.hidden = FALSE;
if ([city count]==0)
_autotable.hidden = TRUE;
else
_autotable.hidden = FALSE;
[_carTable reloadData];
[_autotable reloadData];
return TRUE;
【问题讨论】:
NSPredicate - case insensitive filtering for multiple conditions的可能重复 【参考方案1】:对于不区分大小写的搜索替换
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF CONTAINS %@",passcode];
与
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF CONTAINS[c] %@",passcode];
这里,[c]表示不区分大小写的比较。
【讨论】:
让我试试。 @Priya【参考方案2】:使用 UITextfieldDeleage、UITableViewDelegate、UITableViewDataSource
@interface ABCViewController : UIViewController <UITextFieldDelegate>
myTextField.delegate = self;
1.获取TextField文本并将值保存在NSMutableArray中
2.检索数组值并使用NSPredicate检查TextField文本是否已经包含在数组中
3.将TableViewCell TextLabel文本显示到Textfield
#pragma mark - UITextField Delegate
-(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];
autoCompleteFilterArray = [autoCompleteArray filteredArrayUsingPredicate:predicate];
NSLog(@"%@", autoCompleteFilterArray);
if ([autoCompleteFilterArray count]==0)
autoCompleteTableView.hidden = TRUE;
else
autoCompleteTableView.hidden = FALSE;
[autoCompleteTableView reloadData];
return TRUE;
【讨论】:
你检查过答案了吗? @siddle以上是关于来自Objective c中数组项的自动完成文本字段的主要内容,如果未能解决你的问题,请参考以下文章
XCode自动完成不适用于Objective C中的特定项目