2016-01-19 2 views
1

У меня есть uitextfield, которое я пытаюсь обновить с информацией, которую я запрашиваю в Интернете, однако текст не отображается в текстовом поле до тех пор, пока я не нажму текстовое поле. Как я могу получить текст, который появляется сам по себе, используя объективный c?Как получить текст UItextfield для обновления?

Я помещаю текст в текстовое поле с помощью

self.textfield.text = title; 

где название является NSString.

if (error == nil) { 

    NSDictionary *responseBody = [NSJSONSerialization JSONObjectWithData: data options: 0 error: nil]; 

    NSLog(@"got response: %@", responseBody); 
    NSString *title=[responseBody objectForKey:@"name"]; 
    self.titleOfBook.text = title; 
} 

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

+0

показать код, в котором вы хотите установить заголовок для текстового поля. –

+0

отредактирован, чтобы включить код, который я использовал – David

+0

Подразумевается ли вы 'placeholder'? Может быть, вы можете попробовать это. – SeraZheng

ответ

2

Попробуйте

if (error == nil) { 

    NSDictionary *responseBody = [NSJSONSerialization JSONObjectWithData: data options: 0 error: nil]; 

    NSLog(@"got response: %@", responseBody); 
    NSString *title=[responseBody objectForKey:@"name"]; 
    self.titleOfBook.text = title; 
} 
else { 
    self.titleOfBook.text = @""; 
} 

Или же вы можете скрыть текстовое поле, если вы не хотите, чтобы отобразить или имеющие проблемы текста заполнителя.

self.titleOfBook.hidden != title.length > 0; //It'll display only length greater than zero. 

Тем не менее, он не будет обновлен, а затем сделает его доступным в основном потоке. Обновления пользовательского интерфейса будут работать в главной теме.

dispatch_async(dispatch_get_main_queue(), ^{ 

    self.titleOfBook.text = YOUR_OPERATION; 
}); 

Спасибо.

+1

используя dispatch_async. Я думаю, что это было из-за того, что я не вызывал сессию NSURL в основном потоке. – David

+0

@ Daniel Yea. для этого нам нужно обновить интерфейс с помощью «dispatch_get_main_queue», –

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

    if(textField.text.length + string.length - range.length > 3) // lets say 3 chars mininum 
    { 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
text 
    NSDictionary *responseBody = [NSJSONSerialization JSONObjectWithData: data options: 0 error: nil]; 

    NSLog(@"got response: %@", responseBody); 
    NSString *title=[responseBody objectForKey:@"name"]; 
    self.titleOfBook.text = title; 
      }); 
     }); 

    } 

    return YES; 
} 

Попробуйте это .. Использование Block это поможет у ...

Смежные вопросы