来自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中的特定项目

使用 NSNumberFormatter 循环中的 Objective C 自动释放

Objective C 布尔数组

跟我一起写Makefile

来自数组 JS 的自动完成输入表单