2015-05-20 4 views
1

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

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 

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

+0

Вы уверены, что 'searchField' не' nil'? – rmaddy

+0

Да, я уверен, что это не nil – NTNT

+1

Прочтите документы для 'selectedTextRange'. Он говорит, что возвращает «nil», если нет выбора. Имеет ли текстовое поле фокус, когда вы вызываете эти методы? – rmaddy

ответ

0

Вы попробовали Ведение журнала 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 .. >.< 

я программно selectedTextRange (для примера) и, вероятно, что-то делать с autolayout xibs или что-то (странно, я не испытать его), но там есть, попробовать .. :)

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

Счастливый кодирования. , Ура!

+0

Спасибо, но он все еще не работает. я регистрирую поле поиска и уверен, что это не ноль. BTW, моя поисковая панель выходит из XIB, возможно, это причина? – NTNT

+0

@NTNT .. Опять я попробовал ваш код и да я тоже думаю, что это причина по Xibs Автокомпоновка .. Хм .. я помещен код внутри: '- (недействительными) viewDidLayoutSubviews { [супер viewDidLayoutSubviews]; } 'Я отредактирую свой ответ .. – 0yeoj

+0

Спасибо. но как вы можете попробовать на мероприятии uibutton? Я пишу его в 1 случае, но когда вы вызываете это событие, он все равно показывает nil. Я также попытался поместить мой код в viewDidLayoutSubviews, и это сработало! поэтому стресс ... – NTNT