单个UITextField输入多个项目而无需键盘关闭

时间:2014-02-03 12:09:43

标签: ios objective-c uiviewcontroller keyboard uitextfield

我想实现单个UITextField和键盘的以下行为:

  1. 当视图加载后UITextField成为第一响应者并且键盘打开(到目前为止一直很好):

    - (void)viewDidLoad
    {
       [self.editField becomeFirstResponder];
       self.editField.delegate = self;
    }
    
  2. 现在用户输入一些文本并按回车键。该文本将通过以下方法添加到数据源中:

    - (IBAction)didEndOnExit:(id)sender {
      //add self.editField.text to data source
    }
    
  3. 现在按下返回键并调用上面的UITextField方法并执行后,我希望UITextField清除,光标放置并在文本字段的开头和键盘不要隐藏,以便可以在文本字段中输入新项目并将其添加到数据源。

  4. 这是我回到应用程序中的上一个视图的方式(使用按钮):

    - (IBAction)backButtonPressed:(id)sender {
        [self dismissViewControllerAnimated:NO completion:^{}];
    }
    

    我尝试使用UITextFieldDelegate的方法和UITextField的{​​{1}}并辞职becomeFirstResponder,但无法实现上述行为。我在Stack Overflow上看过关于使用连续FirstResponder来输入数据的帖子,但不是一次又一次地使用相同的UITextField

5 个答案:

答案 0 :(得分:1)

你应该覆盖下面提到的方法并做你想做的任何事情并显示键盘。

- (BOOL)textFieldShouldReturn:(UITextField *)textField

试一试:)

答案 1 :(得分:1)

在解除视图控制器时,所有其他代码执行都会在(视图控制器被解除)时冻结。 使用一些延迟(performselectorafterdelay)。或

dismissingviewcontroller的completionhandler,用于在解除viewcontroller并执行代码时

还在主线程上执行包含UI更改或更新的代码

答案 2 :(得分:0)

保存数据后......你必须使uitextfield为nil ...就像self.editField.text = nil一样。然后你可以调用[self.editfield becomefirstresponder] ..之后你将添加更多项目到数组或其他任何东西,每次你添加后该字段应为零..

答案 3 :(得分:0)

来自文档

  

返回值:如果文本字段应实现其默认值,则为YES   返回按钮的行为;否则,没有。

对于EX - 使用UITextField的代表:

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    //add self.editField.text to data source
    textField.text = @"";

        return NO; // This will do your need
}

答案 4 :(得分:0)

因为我使用了UITextField的操作方法- (IBAction)didEndOnExit:(id)sender,键盘总是关闭。显然,该方法使UITextField辞职成为第一响应者。可以在委托的方法- (BOOL)textFieldShouldReturn:(UITextField *)textField中添加数据,而不是将数据添加到该方法中的数据源,因此键盘不会关闭。