2015-12-23 2 views
0

Я работаю в Xcode 6.4 (Objective C). У меня есть массив имен. Я хочу автозаполнять свой textfield, пока пользователь вводит что-то. Если пользователь вводит «a» в TextField, выдается выпадающий список со всеми именами, начинающимися с «a». Подобно тому, что если пользователь вводит «ab», в TextField, вы увидите выпадающий список со всеми именами, начинающимися с «ab».Autocomplete textfield in ios

Я знаю, что TableView необходим для dropdown. Я попробовал несколько примеров, выполнив поиск SO и других сайтов (RayWendelich.com). Но я не мог решить эту проблему. Пожалуйста, помогите мне с простым решением. (Я новичок в разработке iOS).

+0

в чем проблема? что вы пробовали? –

+0

Вам нужно выпадающее меню или функции поиска? –

+0

Мне нужна функция поиска –

ответ

2

Для этого вы можете использовать shouldChangeCharactersInRange метод делегата от UITextField.

- (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; 
} 
+0

он не работает для меня –

+0

В чем проблема? Какие объекты хранятся в массиве и какой текст вы ищете? –

0

- (BOOL) TextField: (UITextField *) TextField shouldChangeCharactersInRange: (NSRange) Диапазон replacementString: (NSString *) Строка {

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

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

    [self searchFoodNameFromString:substring]; 

возвращение ДА;

}

- (недействительными) 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]; 

} 

}

- (недействительными) 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]; 

}

+0

Я попробовал. Но не работает для меня –