【问题标题】:Autocomplete textfield in iosios中的自动完成文本字段
【发布时间】:2015-12-23 10:17:25
【问题描述】:

我在Xcode 6.4(目标C)工作。我有一个名称数组。我想在用户输入内容时自动完成我的textfield。如果用户在TextField 中输入“a”,则必须显示所有名称以“a”开头的下拉列表。就像如果用户在TextField 中输入“ab”,必须显示所有以“ab”开头的名称的下拉列表。

我知道下拉菜单需要TableView。我通过搜索 SO 和其他网站 (RayWendelich.com) 尝试了一些示例。但我无法解决这个问题。请帮助我提供一个简单的解决方案。(我是 iOS 开发的新手)。

【问题讨论】:

  • 有什么问题?你试过什么?
  • 您需要类似下拉菜单或搜索功能吗?
  • 我需要搜索功能
  • 显示您最接近的解决方案并告诉我们它做错了什么
  • 我使用了以下代码。

标签: ios objective-c uitableview uitextfield


【解决方案1】:

为此,您可以使用UITextField 的shouldChangeCharactersInRange 委托方法。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *searchText = [textField.text stringByReplacingCharactersInRange:range withString:string];

    for(NSString *strName in arrNames) {
        if([strName hasPrefix:searchText]) {
            // Entered text match with names array
            // Store it in temporary array.
        }
    }

   return YES;
}

【讨论】:

  • 有什么问题?哪些对象存储在数组中,您正在搜索哪些文本?
【解决方案2】:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

     NSString *substring = [NSString stringWithString:textField.text];

     substring = [substring stringByReplacingCharactersInRange:range withString:string];

    [self searchFoodNameFromString:substring];

返回是;

}

-(void)searchFoodNameFromString:(NSString *)strFood {

if(strFood.length>2)
{
     [arrAutoSuggFood removeAllObjects];
    NSInteger counter = 0;
    for(NSString *name in itemArray)
    {
        NSRange r = [name rangeOfString:strFood options:NSCaseInsensitiveSearch];
        if(r.length>2)
        {
            [arrAutoSuggFood addObject:name];
        }

        counter++;

    }

    if (arrAutoSuggFood.count > 0)
    {
        NSLog(@"%@",arrAutoSuggFood);
        self.viewAutoSuggest.hidden = FALSE;
        [self displayAutoSuggestView];

    }
    else
    {
        self.viewAutoSuggest.hidden = TRUE;
    }

}
else
{
    [self.viewAutoSuggest setHidden:TRUE];

}

}

-(void)displayAutoSuggestView {

CGFloat autoSuggViewHeight;
if ([arrAutoSuggFood count] == 1) {
    autoSuggViewHeight = 44.0 * 1;
} else if ([arrAutoSuggFood count] == 2) {
    autoSuggViewHeight = 44.0 * 2;
} else {
    autoSuggViewHeight = 44.0 * 3;
}


[_viewAutoSuggest removeFromSuperview];
_viewAutoSuggest.frame = CGRectMake(addFoodAnotationTxt.frame.origin.x+8, addFoodAnotationTxt.frame.origin.y - autoSuggViewHeight, addFoodAnotationTxt.frame.size.width, autoSuggViewHeight);
[_scrlVwMain bringSubviewToFront:_viewAutoSuggest];
[_scrlVwMain addSubview:_viewAutoSuggest];

_tblAutoSugg.frame = self.viewAutoSuggest.bounds;
_tblAutoSugg.delegate = self;
_tblAutoSugg.dataSource = self;
[_viewAutoSuggest addSubview:_tblAutoSugg];
 [_tblAutoSugg reloadData];

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2015-04-27
    • 2016-11-18
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多