2015-04-02 5 views
0

Я программирование формы для моего приложения IOS, и UITextField сек акт моего странно:UITextField .text атрибута всегда возвращает пустую строку

Когда форма находится в состоянии обновления (поля уже заполнены) я могу редактировать и получить новый текст ввода (введенный пользователем) с атрибутом .text. Но когда форма находится в режиме вставки, UITextField s изначально пустые, и я не могу получить текст, введенный тогда пользователем с атрибутом .text, потому что он всегда возвращает пустую строку независимо от типа пользователя. Вот видео, показывающее вопрос: https://youtu.be/tPJZ3sC-IFU

{ 
    __weak IBOutlet UITextField *txtLibelle; //linked by ctrl + drag to the storyboard 
    NSString *libelleTemp; 
} 
- (void)viewDidLoad { 
[super viewDidLoad]; 

    // ... 

    [txtLibelle addTarget:self 
        action:@selector(editingChanged:) 
     forControlEvents:UIControlEventEditingChanged]; 

    // ... 

} 

-(void) editingChanged:(id)sender { 
    libelleTemp = txtLibelle.text; 
    // libelleTemp is set to @"" whatever the user has typed in when I'm in insert mode 
} 

-(void)initWithLib:(NSString *)lib { 
    libelleTemp = [NSString stringWithString:lib]; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 
    if (indexPath.section == 0) { 
     txtLibelle.text = libelleTemp; 
    } 

    // ... 

    return cell; 
} 

initWithLib: метод вызывается из предыдущего контроллера представления, как это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIStoryboard *accueilNavSB = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    FicheAlerteTableViewController *vc = [accueilNavSB instantiateViewControllerWithIdentifier:@"ficheAlerte"]; 
    NSString *libelle = @""; 
    [vc initWithLib:libelle]; 
    [self.navigationController showViewController:vc sender:self]; 
} 

Я уже перекомпоновывается поле из раскадровки в мой класс , а в режиме отладки мой UITextField не равен нулю.

Мое текстовое поле находится в статическом UITableView, поэтому я вижу, работает ли обновление, прокручивая ячейку с экрана, а затем прокручивая ее.

Кто-нибудь знает, почему это происходит и как решить проблему?

+1

Что значит, вы не можете получить текст ввода через .text? –

+0

Если текстовые поля пусты в режиме вставки, как вы можете получить строку атрибутом .text? В любом случае это пустая строка. –

+0

Вопрос отредактирован. –

ответ

1

В коде есть одна ошибка. Вы не используете правильный атрибут для загрузки текста в метку. Используйте это.

Это сработало для меня. Я тестировал это на своем Xcode.

-(void) editingChanged:(id)sender { 
    //label1.text = field.text; 
    libelleTemp=field.text; 
    NSLog(@"text is %@",libelleTemp); 
    // libelleTemp is set to @"" whatever the user has typed in when I'm in insert mode 
} 
+0

Это не работает, я думаю, что проблема в другом месте. Он действует так же, как пользователь ничего не набрал. field.text по-прежнему возвращает пустую строку. –

+0

Я тестировал свой Xcode, и он работал нормально. Не могли бы вы показать код, как вы объявляете строку и как вы к ней обращаетесь?> –

+0

Я задаю этот вопрос (я уже добавил видео, показывающее проблему). –

0

Вы используете UITextField, который может использовать UITextFieldDelegate для регистрации редактирования событий и тому подобное. Дополнительную информацию см. В приложении Apple documentation.

Я считаю, что метод, который вы ищете:

<UITextFieldDelegate> //link your textField.delegate = self 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    libelleTemp = textField.text; 
} 

Другая вещь, которую вы могли бы попытаться напрямую связывая метод (IBAction) вместо установки цели программно. Просто управляйте перетаскиванием, чтобы связать этот метод с текстовым полем в IB.

- (IBAction)libelleEndedEditing:(UITextField *)sender { 
    libelleTemp = sender.text; 
} 
+0

Я уже пробовал это, но не решил свою проблему. Атрибут .text по-прежнему пуст. Я думаю, что проблема не связана с обработкой событий. –

+0

Ну, я не уверен, но посмотрите, как вы создаете этот контроллер. Лучшей практикой было бы выполнить segue и получить доступ к ней оттуда. И вызвать initwithlib в viewdidload –

0

Вы используете неправильное действие. Свойство «text» UITextField будет установлено только после завершения редактирования. Поэтому вам нужно подключить свой метод к событию «Редактирование завершено» в Interface Builder.

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