tableView convertPoint:fromView:奇怪的行为和变通方法

Wil*_*nez 2 uitableview uitextfield ios

我有一个带自定义单元格的tableView.单元格中的一个对象是textField.tableViewController是textFieldDelegate.表的数据源是一个对象数组.当用户点击textField时,tableViewController实现textField委托方法控制这种方式的数据输入.
要使用用户输入的数据,tableViewController实现以下内容:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
  {
    CGPoint point = [textField center];
    point = [self.tableView convertPoint:point fromView:textField];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
... 
...
    return YES
  }
Run Code Online (Sandbox Code Playgroud)

我花了两个小时试图弄清楚为什么indexPath.row总是错误的,它总是排在第一行的假设.解决方案:在故事板中,我将textField移动到单元格的上部.以前有人见过这样的东西吗?谢谢.

Kur*_*vis 6

-[UIView center]返回视图框架的中心,该框架位于视图的superview坐标系中.但是-[UIView convertPoint:fromView:]期望在"从"视图的坐标系中给出一个点.

要么给它相同的点,并告诉它从正确的视图转换:

CGPoint point = [textField center];
point = [self.tableView convertPoint:point fromView:textField.superview];
Run Code Online (Sandbox Code Playgroud)

或者在视图的坐标系中给它一个点,并告诉它从视图转换:

CGRect textFieldBounds = textField.bounds;
CGPoint point = CGPointMake(CGRectGetMidX(textFieldBounds), CGRectGetMidY(textFieldBounds));
point = [self.tableView convertPoint:point fromView:textField];
Run Code Online (Sandbox Code Playgroud)