selectedTextRange возвращает ноль в UISearchbar iOS

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

UITextField *searchField = [self.searchBar valueForKey:@"_searchField"];
[searchField becomeFirstResponder]; // focus to this searchfield

И я заполняю текст:

self.searchBar.text = @"This is text";

И проверил, еслиUITextField Текст заполнен, и это так. Тем не менее, все методы, касающиесяUITextPosition а такжеUITextRange вернуть ноль:

UITextRange *selectedRange = [searchField selectedTextRange]; //selectedRange = nil
UITextPosition *newPosition = [searchField positionFromPosition:selectedRange.start offset:addressToComplete.street.length]; //newPosition = nil
UITextRange *newRange = [searchField textRangeFromPosition:newPosition toPosition:newPosition]; //newRange = nil

Мой код что-то не так?

1 ответ

Решение

Вы пробовали войти UITextField *searchField? его ноль от взглядов этого.. я думаю, что ваш код должен быть..

(UITextField *)[self.searchBar valueForKey:@"_searchField"]

([после попытки вашего кода] OooOoKayyy.. это работает.. хахаха..) Кстати, вот как я получаю UITextField внутри searchBar..

for (id object in [[[self.searchBar subviews] objectAtIndex:0] subviews])
{
    if ([object isKindOfClass:[UITextField class]])
    {
        UITextField *searchField = (UITextField *)object;
        break;
    }
}

Сначала я попробовал то, что у вас есть:

UITextField *searchField = (UITextField *)[searchBar valueForKey:@"_searchField"];
searchBar.text = @"This is text";
// and logging your searchField.text here.. returns nil/empty.. 

и я попытался переставить это так...

 searchBar.text = @"This is text";
 UITextField *searchField = (UITextField *)[searchBar valueForKey:@"_searchField"];
 NSLog(@"searchFields.text :%@", searchField.text);

снова я попробовал твой код под -(void)viewDidLoad но ничего хорошего, да это всегда ноль, как ты сказал.. теперь это выглядит так..

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    searchBar.text = @"This is text"; // not important

    UITextField *searchField = [searchBar valueForKey:@"_searchField"];
    [searchField becomeFirstResponder];

     UITextRange *selectedRange = [searchField selectedTextRange]; //selectedRange = not nil anymore

     NSLog(@"searchField.text :%@ -> selectedRange :%@\n\n" , searchField.text, selectedRange);
}
//i've also tried it inside uibutton's event and i worked .. >.< 

я программно выбрал TextRange (например, для целей) и, возможно, это как-то связано с автопоставкой xibs или чем-то еще (странно, я не испытываю этого), но это так, попробуйте..:)

Я надеюсь, что я помог тебе..

Удачного кодирования.. Ура!

Другие вопросы по тегам