Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS UITextField可以';不要多次成为第一反应者_Ios_Objective C_Textfield_Becomefirstresponder - Fatal编程技术网

iOS UITextField可以';不要多次成为第一反应者

iOS UITextField可以';不要多次成为第一反应者,ios,objective-c,textfield,becomefirstresponder,Ios,Objective C,Textfield,Becomefirstresponder,我有一个UITableView分区,当你点击某个分区时,该分区会展开,并且有选项可供选择,或者你可以通过UITableView单元格之一的UITextField插入你自己的选项。对于该单元格,我在tableView:cellforrowatinexpath:中有以下代码来配置自定义单元格并设置第一响应程序 DataAddTVCell *dataInputcell = (DataAddTVCell *)cell; dataInputcell.data.delegat

我有一个
UITableView
分区,当你点击某个分区时,该分区会展开,并且有选项可供选择,或者你可以通过
UITableView单元格之一的
UITextField
插入你自己的选项。对于该单元格,我在
tableView:cellforrowatinexpath:
中有以下代码来配置自定义单元格并设置第一响应程序

        DataAddTVCell *dataInputcell = (DataAddTVCell *)cell;
        dataInputcell.data.delegate = self;
        self.dataTextfield = dataInputcell.data;
        [self.dataTextfield becomeFirstResponder];
数据字段是
UITextField
。我将
UITextField
保存在self.dataTextField中,以便以后可以
辞职FirstResponder

my
DataAddTVCell
第一次从和扩展部分加载时,它工作正常,成为第一响应程序。辞去第一响应者的职务同样有效。但是当另一个部分被扩展时,当单元格再次加载时,它不会成为第一个响应程序。如果我点击
文本字段
,键盘会显示良好,我可以像以前一样退出第一响应者。不知道为什么textField只能成为第一响应者一次。我也有这些委托方法,并设置了


我怀疑发生这种情况是因为我使用了
dequeueReusableCellWithIdentifier
。有什么方法可以让它在使用时工作吗?或者,如果我想让它在显示时始终成为第一响应者,我是否每次都必须创建一个新单元?但总是创建这么多单元格似乎很糟糕。

这种情况发生是因为每次加载单元格时,都会重新创建它,从而创建它的子视图。因此,对文本字段的引用将丢失。要成功地放弃它,您需要保持对父单元格的关注,以避免重新创建单元格

编辑

另一种选择是记住cell的indexpath,即您希望成为第一响应者的文本字段。在该索引处创建单元格时,遍历其子视图,捕获textfield的引用,并在其上调用
becomeFirstResponder

你需要做我上面提到的同样的事情。在
cellforrowatinexpath:
中的适当位置编写以下代码:

if(indexPath.section==0)//您所在的节中存在该单元格。e、 g.0
{
if(indexPath.row==1)//单元格编号1
{
if(showingInputCell)//标记以跟踪它是textfield单元格还是其他单元格
{
用于(UIView*单元格中的子视图。子视图){
if([subview iskindof类:[UITextField类]])
[(UITextField*)子视图成为第一响应者];
}
}
}
}

但我每次都将self.dataTextField重新分配给新的cell.data。你能再详细一点吗?@user1529956首先告诉我你想把textfield放在某个特定的(固定的)indexath上吗?我有这样的想法,当你点击节中的第1行时,它会将单元格更改为输入单元格,这就是我想成为第一个带有textfield的单元格responder@user1529956看看我的答案。我希望它能帮助你。
- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (BOOL)becomeFirstResponder
{
    return YES;
}