Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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 UITableViewCell中的UITextField——当它出现在屏幕上时,以编程方式使其成为第一响应者?_Ios_Objective C_Uitableview - Fatal编程技术网

Ios UITableViewCell中的UITextField——当它出现在屏幕上时,以编程方式使其成为第一响应者?

Ios UITableViewCell中的UITextField——当它出现在屏幕上时,以编程方式使其成为第一响应者?,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个UITableView,每个单元格内都有一个UITextField。存储当前正在编辑的单元格索引的模型对象。如果手机滚动到屏幕外,我的应用程序将取消第一响应者的状态。(不这样做可能会导致问题)。现在,假设与该索引对应的一个单元格(可能是同一个,也可能是不同的单元格)即将回滚到屏幕上。我想让那个手机的文本字段成为第一响应者。我的代表确实接到了一个电话 tableView: willDisplayCell: forRowAtIndexPath: 对应于新的单元格。但是,此时调用become

我有一个UITableView,每个单元格内都有一个UITextField。存储当前正在编辑的单元格索引的模型对象。如果手机滚动到屏幕外,我的应用程序将取消第一响应者的状态。(不这样做可能会导致问题)。现在,假设与该索引对应的一个单元格(可能是同一个,也可能是不同的单元格)即将回滚到屏幕上。我想让那个手机的文本字段成为第一响应者。我的代表确实接到了一个电话

tableView: willDisplayCell: forRowAtIndexPath:
对应于新的单元格。但是,此时调用becomeFirstResponder:没有帮助,因为在显示firstResponder状态之前,该单元格不会接受firstResponder状态

除了使用计时器之外,还有什么办法可以调用becomeFirstResponder:当细胞实际上能够成为第一响应者时


编辑:cellForRowAtIndexPath:始终在willDisplayCell:之前调用。所以没有帮助。

我还没有尝试过这个,但我要尝试的第一件事是在CellForRowatineXpath中

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // standard stuff to build cell and setup it's state

    if ([indexPath isEqual:self.myModel.indexPathOfTextFieldBeingEdited]) {
        // you probably have a handle to the text field from the setup above
        UITextField *textField = (UITextField *)[cell viewWithTag:SOME_TAG];
        [textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
    }
    return cell;
}

您必须在屏幕上显示单元格,使其成为第一响应者。首先要做:

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO];

然后在其标签/文本字段上呼叫第一响应者。

以下是我在MonoTouch中所做的操作-重要的是不要对ScrollToRow()设置动画-即edzio27的回答中显示的“动画:否”(谢谢edzio27:)


每当调用cell appeares-cellforrowatinedexpath委托方法时,您是否尝试将uitextfield设置为那里的第一响应程序?已尝试。无益。问题再次在于单元格未显示。是否使用PerformSelect?它肯定是在CellForRowatineXpath返回并且主循环返回后显示的。这实际上是一个计时器。这样的拖延通常会奏效。但这不是理想的编程风格,可能会被苹果的更新所破坏。延迟为0.0,表示在当前运行循环返回后,将此消息排队以尽快运行。我不确定我是否理解你关于编程风格的观点,或者为什么这一点——相对于sdk行为的任何其他部分——更容易被苹果改变。。。但是我当然接受你的不接受:)。对,如果情况发生了变化,导致运行循环的下一次迭代不再足够好,该怎么办?
var newCell = (UIOrderLineCell)tableView.CellAt(newIndexPath);
if (newCell == null)
{
    tableView.ScrollToRow(newIndexPath, UITableViewScrollPosition.Middle, false);
    newCell = (UIOrderLineCell)tableView.CellAt(newIndexPath);
}