我想实现单个UITextField
和键盘的以下行为:
当视图加载后UITextField
成为第一响应者并且键盘打开(到目前为止一直很好):
- (void)viewDidLoad
{
[self.editField becomeFirstResponder];
self.editField.delegate = self;
}
现在用户输入一些文本并按回车键。该文本将通过以下方法添加到数据源中:
- (IBAction)didEndOnExit:(id)sender {
//add self.editField.text to data source
}
现在按下返回键并调用上面的UITextField
方法并执行后,我希望UITextField
清除,光标放置并在文本字段的开头和键盘不要隐藏,以便可以在文本字段中输入新项目并将其添加到数据源。
这是我回到应用程序中的上一个视图的方式(使用按钮):
- (IBAction)backButtonPressed:(id)sender {
[self dismissViewControllerAnimated:NO completion:^{}];
}
我尝试使用UITextFieldDelegate
的方法和UITextField
的{{1}}并辞职becomeFirstResponder
,但无法实现上述行为。我在Stack Overflow上看过关于使用连续FirstResponder
来输入数据的帖子,但不是一次又一次地使用相同的UITextField
。
答案 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
中添加数据,而不是将数据添加到该方法中的数据源,因此键盘不会关闭。