Подтвердить что ты не робот

UITextField Автозаполнение?

Я пытаюсь выяснить, есть ли способ реализовать функцию автозаполнения в UITextField для конкретных значений.

Я знаю, что UITextField может сделать это с помощью словаря iPhone (так же, как поиск в Google в Safari и т.д.), Но я хочу иметь возможность программно настроить его на определенные значения, которые я указываю.

Как это сделать?

4b9b3361

Ответ 1

Бретт,

Я сделал что-то очень похожее на это, работая над недавним и довольно крупным проектом. У нас был постоянно меняющийся список автозаполняющих терминов и построил авто-полный вокруг них.

Во-первых, вы захотите сделать какой-то тип автоматического контроллера. Он должен взять строку и вернуть все возможные автополные термины для этой строки.

-(NSArray *)completionsForString:(NSString *)myString;

Затем проверьте класс UIMenuController. Это класс, который показывает параметры cut/copy/paste во многих приложениях. Вы можете получить общий экземпляр, заполнить элементы меню самостоятельно и показать его над текстовым полем. Затем пользователь может просто нажать термин, который они хотят.

В конце концов, решение работало очень хорошо для наших нужд. Надеюсь, это сработает для вас.

Ответ 2

Просмотрите этот учебник от Ray Wenderlich, который демонстрирует один из способов достижения пользовательского автозаполнения

Ответ 3

В качестве альтернативы вы можете использовать этот подкласс UITextField (вдохновленный DOAutocompleteTextField):

https://github.com/hoteltonight/HTAutocompleteTextField

Он получил еще несколько функций и активно развивается. В этом примере показано, как использовать массив в качестве источника данных для текста с автоматической записью. Он использует тот же подход, что и DOAutocompleteTextField, поскольку он показывает предлагаемый текст завершения "призрачный" в текстовом поле по типу пользователя.

Ответ 5

С помощью вышеупомянутого учебника Ray Wenderlich я только что внедрил версию этого для фильтрации имен в существующем UITableView.

Я установил делегат текстового поля в качестве моего контроллера представления, моего контроллера представления как UITextFieldDelegate и реализовал эти два метода:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *substring = [NSString stringWithString:textField.text];
    substring = [substring stringByReplacingCharactersInRange:range withString:string];
    [self searchAutocompleteEntriesWithSubstring:substring];
    return YES;
}

- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring
{   
    NSMutableArray *autoCompleteArray = [[NSMutableArray alloc]init];
    [self retrieveData];

    for(NSString *curString in _staffTableArray)
    {
        NSString *lowerCaseCur = [curString lowercaseString];
        NSRange substringRange = [lowerCaseCur rangeOfString:substring];
        if (substringRange.location == 0)
        {
            [autoCompleteArray addObject:curString];
        }
    }
    if (![substring isEqualToString:@""])
    {
         _staffTableArray = [NSMutableArray arrayWithArray:autoCompleteArray];
    }  
    [_staffListTableView reloadData];
}

Ответ 6

используйте этот метод делегата. вы можете заменить значения, которые вы указали.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text
      if ([string isEqualToString:@"StackO"]) {
           [email protected]"StackOverflow";
      }
    return YES;
}

Ответ 7

Просто столкнулся с этой нитью, потому что мне нужно что-то подобное. Как реализовать собственный поиск с помощью метода UITextfieldDelegate:

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

Как вы, наверное, знаете, этот метод вызывается для каждого ввода UITextfield.