2012-07-07 101 views
7

我有一个textField被设置为改变tableView的数据源与输入(并调用reloadData)的每个字母。UITableView reloadData导致UITextField resignFirstResponder

但由于某些原因,每次输入字母时,键盘被驳回。

任何人都知道为什么?

+1

发布开始编辑您的文本字段和任何其他相关方法的方法的代码,我们不能帮助你,如果我们不能看到问题是什么。的 – 8vius 2012-07-07 05:41:18

+1

可能重复[UITableView的reloadData辞职第一响应(http://stackoverflow.com/questions/6409370/uitableview-reloaddata-resigns-first-responder) – CodaFi 2012-07-07 05:43:41

+0

@CodaFi你钉它。 textField位于表格顶部的自定义单元格中,因此当我重新装入数据时,它也会重新加载该单元格,从而使其内部的任何内容都被取消。谢谢!!! – 2012-07-07 16:31:03

回答

10

你的文本字段辞职,因为重载单元发送-resignFirstResponder消息,由于他们的生存是不是一个重装后保证。有关更多信息,请参阅此related问题。

+0

一个很好的解决方法是增加一个隐藏的文本框的视图,切换重装表时重点转移到该文本框。重新加载表格后,您可以将焦点切换回原始文本字段,以保持该键盘处于打开状态。 [self.fakeTextField becomeFirstResponder]; [self.tableView reloadData]; [self.textField performSelector:@selector(becomeFirstResponder)withObject:nil afterDelay:.01]; – hobosf 2015-06-12 19:27:19

-3

使用此方法textFieldShouldReturn:并在yourClass.h文件中添加UITextFieldDelegate委托。将代表设置为yourTextfield并在viewDidLoad方法中写下以下代码。

yourTextfield.delegate = self;

,并实现textFieldShouldReturn:如下的

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 

     [theTextField resignFirstResponder]; 

    return YES; 
} 

我认为这将是对你有所帮助。